LINUX.ORG.RU

История изменений

Исправление 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.