Не получаю SIGCHLD для процессов, выполняемых с помощью sudo

В настоящее время я пишу оболочку. Я выполняю процессы и использую обработчик сигнала SIGCHLD для очистки (ожидания) после их завершения.

Все работает - за исключением тех случаев, когда я выполняю процессы, повышающие привилегии с помощью sudo. В этих случаях я никогда не получаю сигнал SIGCHLD - поэтому я никогда не знаю, что процесс завершил выполнение.

Когда я получаю команду, например sudo ls, я выполняю программу sudo, а затем предоставляю ls в качестве параметра. Я выполняю это действие с помощью execvp.

Если я посмотрю на ps -aux после выполнения sudo ls, то увижу следующее:

root      4795  0.0  0.0   4496  1160 pts/29   S+   16:51   0:00 sudo ls
root      4796  0.0  0.0      0     0 pts/29   Z+   16:51   0:00 [ls] <defunct>

Итак, sudo запущен и получил pid = 4795, а дочерний (ls) получил 4796. Ребенок выполнил свою задачу и теперь сидит в состоянии зомби. sudo, похоже, не хочет пожинать плоды зомби-процесса и просто сидит там.

Я хотел бы знать, что вызывает такое поведение - я пробовал различные методы очистки этих зомби-процессов, такие как запуск моей оболочки под sudo и ожидание непосредственно от sudo и PID, который sudo выполняет (4796 в приведенном выше примере). Ни один из этих методов не сработал.

Как всегда, любой совет будет принят с благодарностью.

11
задан BSchlinker 22 November 2011 в 01:05
поделиться