Баш: убить $$ не получится?
Команда 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 ответа:
Я не уверен, почему кто-то хотел бы
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.