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