У вас есть несколько вариантов. Один из них - остановить скрипт ( CtrlZ), получить PID скрипта и отправить SIGKILL
в группу процессов.
Когда команда выполняется в оболочке, процесс, который она запускает, и все ее дочерние элементы являются частью одной группы процессов (в данном случае, группы процессов переднего плана). Чтобы отправить сигнал всем процессам в этой группе, вы отправляете его руководителю процесса. Для kill
команды лидер процесса обозначается так:
kill -PID
Где PID
находится идентификатор процесса скрипта.
Пример:
Рассмотрим скрипт, test.sh
который запускает некоторые процессы. Скажем, вы запустили его в оболочке:
$ ./test.sh
В другом терминале
$ pgrep test.sh
17802
$ pstree -ps `!!`
pstree -ps `pgrep test.sh`
init(1)───sshd(1211)───sshd(17312)───sshd(17372)───zsh(17788)───test.sh(17802)─┬─dd(17804)
├─sleep(17805)
└─yes(17803)
В этом случае, чтобы отправить сигнал группе процессов, созданной test.sh
, вы должны сделать:
kill -INT -17802
-INT
используется для отправки SIGINT
, и поэтому эта команда эквивалентна нажатию CtrlCна терминал. Отправить SIGKILL
:
kill -KILL -17802
Вам нужно остановить скрипт, только если вы не можете открыть другой терминал. Если вы можете, используйте, pgrep
чтобы найти PID.
Одной из команд, запускаемых сценарием, может быть прерывание SIGINT
, поэтому, вероятно, CtrlCоно неэффективно. Тем SIGKILL
не менее, не может быть пойман в ловушку, и это, как правило, последний вариант. Возможно, вы захотите попробовать SIGTERM
( -TERM
), прежде чем идти на убийство. Ни SIGKILL
или SIGTERM
не может быть установлен как клавиатура ярлыка пути SIGINT
есть.
Все это спорный вопрос , если ваш сценарий не содержит притон линии. Из этого так ответьте :
Обычно родительская оболочка предполагает, что сценарий написан для той же оболочки (минимальные оболочки типа Борна запускают сценарий с / bin / sh, bash запускает его как подпроцесс bash) ...
Из-за этого при выполнении сценария вы не найдете процесс, названный в соответствии со сценарием (или процесс с именем сценария в командной строке), и pgrep
произойдет сбой.
Всегда используйте линию Шебанга.
Ctrl + z