Страницы

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

пятница, 10 января 2020 г.

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

#c #процесс


Возможно ли завершить дочерний процесс не дожидаясь его окончания с помощью функции
wait()? Например, как завершить вот такой дочерний процесс:

pid_t pid;
switch(pid=fork()) {
case 0:
  for(;;){}
default:
  //здесь код, который завершает дочерний процесс
  return 0;


P.S. Если вы знаете какой-то адекватный, не сильно мудреный материал по fork(), где
можно почерпнуть теоретические знания, то направьте меня, пжл.
    


Ответы

Ответ 1



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

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

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