Страницы

Поиск по вопросам

среда, 20 февраля 2019 г.

Принудительное завершение дочернего процесса из родителя в fork() в си

Возможно ли завершить дочерний процесс не дожидаясь его окончания с помощью функции wait()? Например, как завершить вот такой дочерний процесс:
pid_t pid; switch(pid=fork()) { case 0: for(;;){} default: //здесь код, который завершает дочерний процесс return 0;
P.S. Если вы знаете какой-то адекватный, не сильно мудреный материал по fork(), где можно почерпнуть теоретические знания, то направьте меня, пжл.


Ответ

Жестокий метод:
kill(pid, SIGKILL);
Или более мягко:
kill(pid, SIGTERM);
В первом случае дочерний процесс будет просто убит, во втором получит сигнал, который может обработать. Но SIGKILL убъёт процесс гарантированно, а в случае SIGTERM процесс может отказаться заканчивать работу.
В приведённом коде, поскольку процесс, похоже, не содержит обработчиков сигналов, можно использовать любой метод, поскольку, как верно указал на мою ошибку @avp, SIGTERM при отсутствии обработчика также убьёт процесс.

Комментариев нет:

Отправить комментарий