Могу ли я убить процесс от себя?

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

Ответы

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

kill(getpid(),SIGINT);

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

Это будет похоже на команду exit().

Ответ 5

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

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

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

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

Мое предложение состояло бы в том, чтобы прочитать exit (3) _exit (2) signal (7) signal (2) raise (3) sigaction (3) man-страницы для полного понимания.

Ответ 6

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