У вас есть несколько вариантов. Один из них - остановить скрипт ( 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