Команда kill $$
должен убить текущего Баш, но мне кажется, что он не работает:
$ 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
Почему?
Команда kill $$
должен убить текущего Баш, но мне кажется, что он не работает:
$ 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
Почему?
Я не уверен, почему хотелось бы kill
текущей оболочки. Тем не менее ...
kill PID
отправил SIGTERM
, если не указан никакой сигнал. bash
игнорирует SIGTERM
и SIGQUIT
при отсутствии каких-либо ловушек.
Вы достичь желаемого эффекта, если вы должны были сказать
kill -9 $$
или
kill -SIGKILL $$
Цитирование из manual:
Когда Bash является интерактивным, в отсутствие каких-либо ловушек, оно игнорирует
SIGTERM
(так что «kill 0
» не убивает интерактивную оболочку), иSIGINT
поймано и обработано (так, что построитель ожидания прерывается). Когда Bash получаетSIGINT
, он вырывается из любых циклов . Во всех случаях Bash игнорируетSIGQUIT
.
+1. Я многому учусь из ваших ответов, ты такой эксперт в этих темах. То, что мне не ясно, - это значение «bash игнорирует SIGTERM и SIGQUIT при отсутствии каких-либо ловушек». Не могли бы вы объяснить это немного дальше? – fedorqui
Я иногда убиваю -9 $$ ', чтобы избежать добавления списка команд в файл истории. Я мог вручную редактировать файл истории, но иногда это становится сокращением. Грязный способ сделать это. – anishsane
Он относится к встроенному 'trap', который может * улавливать * сигналы. – devnull
Когда вы посылаете процесс любому сигналу с помощью команды kill, процесс может выбрать обработку сигнала в соответствии с его желанием. (Существует несколько сигналов, которые не могут быть обработаны.)
Когда вы используете kill $$
, вы на самом деле передаете сигнал = 15 (SIGTERM). Процесс может обрабатываться процессом.
Вы можете google для linux signal example знать КАК он реализован.
& Чтобы ответить на ваш вопрос: Если передать не-handlable сигнал, как SIGKILL (9) или SIGSTOP (19), она будет соответственно убить/остановить запущенный процесс Баш.
где вы читали, что 'kill $$' должен убивать текущий bash? – Antarus
возможно это может 'kill \' ps -p $$ | awk 'NR == 2 {print $ 1}' \ '' – Antarus
кроме того, почему бы не просто «выйти»? – anishsane