уничтожение дочернего процесса в случае сбоя execvp - PullRequest
2 голосов
/ 22 июля 2011

У меня есть программа на языке C, похожая по структуре на: http://www.csl.mtu.edu/cs4411/www/NOTES/process/fork/exec.html (то есть это оболочка, которая запускает одну команду с execvp при вводе и выполняет циклы бесконечно, пока не будет введен «выход»).

Каков наилучший способ немедленно завершить дочерний процесс, если нераспознанная команда передана в execvp?Например, если я набрал «ehco» вместо «echo», как я мог быстро убить этот дочерний процесс?Я заметил, что если я ввожу команду, не входящую в мою переменную PATH, а затем сразу наберу команду exit, она не завершится, пока я не введу команду exit позже.

1 Ответ

2 голосов
/ 22 июля 2011

Связанный пример уже делает правильную вещь: ребенок должен безоговорочно вызвать _exit() после execvp().execvp() вернется только в случае сбоя.

(Другими словами, вы не убиваете дочерний процесс от родительского; вы ждете выхода из дочернего процесса и записываете дочерний процесс так, чтобыон убивает себя, если exec не удается).

...