Могу ли я убить процесс из себя? - PullRequest
17 голосов
/ 21 октября 2011

У меня есть код, который выполняется, когда процесс завершается, могу ли я на самом деле вызвать kill(getpid()), чтобы принудительно выполнить этот код (и, очевидно, закрыть процесс)?

Ответы [ 6 ]

23 голосов
/ 21 октября 2011

Да, вы можете. Для этого есть даже специальная функция & mdash; raise(sig) & mdash; хотя kill(getpid(), sig) тоже будет работать.

5 голосов
/ 21 октября 2011

Попробуйте exit - намного проще - зачем усложнять?

3 голосов
/ 21 октября 2011

Вы можете вызвать свой собственный процесс, используя kill через:

kill(getpid(),SIGINT);

Для получения более подробной информации смотрите this

Это будет иметь аналогичный эффект для команды exit ().

3 голосов
/ 21 октября 2011

Я подозреваю, что есть большая проблема с вашим выбором дизайна.

Если вы хотите выполнить некоторый код после завершения вашего процесса, зарегистрируйте код с помощью atexit.

Тем не менее, да, вы можете отправить свой собственный процесс сигнал с kill(getpid(), sig).

1 голос
/ 21 октября 2011

Вы можете использовать kill (getpid (), SIGSPEC), чтобы сделать это правильно, чтобы выполнить код, который фактически установлен в качестве обработчика сигнала для любого конкретного сигнала, указанного в SIGSPEC.

Конечно, вы не можете захватить SIGKILL или SIGSTOP, у которых не может быть обработчиков.Все остальные сигналы могут иметь обработчики, установленные с использованием кода сигнала.

Если код обработчика является не обработчиком сигнала, а обработчиком atexit, то он будет вызываться только через вызов exit ().Обратите внимание, что вызов _exit () обходит все обработчики atexit.

Также я вижу здесь несколько комментариев, которые, кажется, предполагают, что kill (getpid (), SIGSPEC) - это то же самое, что _exit () или exit ()НЕ!Это разные вещи.

Я бы предложил прочитать выход (3) _выход (2) сигнал (7) сигнал (2) повысить (3) sigaction (3) страницы руководства для полного понимания.

0 голосов
/ 27 декабря 2015

Процесс может убить себя следующим образом: убить (getpid (), SIGKILL);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...