Возможно ли завершить дочерний процесс не дожидаясь его окончания с помощью функции 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 при отсутствии обработчика также убьёт процесс.
Комментариев нет:
Отправить комментарий