Баш: убить $$ не получится?


Команда kill $$ должна убить текущий bash, но кажется, что это не работает:

$ ps -p $$
  PID TTY          TIME CMD
18179 pts/4    00:00:00 bash
$ kill $$
$ ps -p $$
  PID TTY          TIME CMD
18179 pts/4    00:00:00 bash

Почему?

2 2

2 ответа:

Я не уверен, почему кто-то хотел бы kill текущую оболочку. Тем не менее...

kill PID будет посылать SIGTERM, когда сигнал не указан. bash игнорирует SIGTERM и SIGQUIT при отсутствии каких-либо ловушек.

Вы достигнете желаемого эффекта, если скажете

kill -9 $$

Или

kill -SIGKILL $$

Цитата из руководства :

Когда Bash интерактивен, в отсутствие каких-либо ловушек, он игнорирует SIGTERM (так что ‘kill 0 ' не убивает интерактивная оболочка), и SIGINT перехватывается и обрабатывается (так что построенное ожидание прерываемый). Когда Баш получает SIGINT, он вырывается из любого выполнение циклов. Во всех случаях Баш игнорирует SIGQUIT.

Когда вы посылаете процессу любой сигнал с помощью команды kill, процесс может выбрать обработку сигнала в соответствии со своим желанием. (Есть несколько сигналов, которые не могут быть обработаны.)

Когда вы используете kill $$, вы фактически передаете ему сигнал=15 (SIGTERM). Это может быть обработано процессом.

Вы можете поискать в google пример сигнала linux, чтобы узнать, как он реализован.

& Чтобы ответить на ваш вопрос: Если вы передадите неуправляемый сигнал, такой как SIGKILL (9) или SIGSTOP (19), он будет соответственно убить / остановить запущенный процесс bash.