История изменений
Исправление beastie, (текущая версия) :
в частности видно, что флаг снимается уже родительским fork'ом перед возвращением к system. у ребёнка же флаг менять смысла нет, т.к. он всё равно не вернётся.
итого решение проблемы — не бинарный флаг (0/1), а конечный автомат: system (0 → 1), fork (ребёнок: если 1 → 2, родитель: 1 → 0), execve (если 2, то выполнить).
при этом стоит учесть, что этот путь исполнения только один из возможных (clone???, vfork @ obsd, etc.)
Исправление beastie, :
в частности видно, что флаг снимается уже родительским fork'ом перед возвращением к system. у ребёнка же флаг менять смысла нет, т.к. он всё равно не вернётся.
итого решение проблемы — не бинарный флаг (0/1), а конечный автомат: system (0 → 1), fork (ребёнок: если 1 → 2, родитель: 1 → 0), execve (если 2, то выполнить).
Исходная версия beastie, :
в частности видно, что флаг снимается уже родительским fork'ом перед возвращением к system.