Masz kilka opcji. Jednym z nich jest zatrzymanie skryptu ( CtrlZ), uzyskanie PID skryptu i wysłanie SIGKILL
do grupy procesów.
Gdy polecenie jest wykonywane w powłoce, rozpoczyna się proces, a wszystkie jego elementy potomne są częścią tej samej grupy procesów (w tym przypadku grupy procesów pierwszego planu). Aby wysłać sygnał do wszystkich procesów w tej grupie, należy wysłać go do lidera procesu. W kill
poleceniu lider procesu jest oznaczony w następujący sposób:
kill -PID
Gdzie PID
jest identyfikator procesu skryptu.
Przykład:
Rozważ skrypt, test.sh
który uruchamia niektóre procesy. Powiedzmy, że uruchomiłeś go w powłoce:
$ ./test.sh
W innym terminalu
$ 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)
W takim przypadku, aby wysłać sygnał do grupy procesów utworzonej przez test.sh
, wykonaj następujące czynności:
kill -INT -17802
-INT
służy do wysyłania SIGINT
, więc to polecenie jest równoważne naciśnięciu CtrlCna terminalu. Aby wysłać SIGKILL
:
kill -KILL -17802
Musisz tylko zatrzymać skrypt, jeśli nie możesz otworzyć innego terminalu. Jeśli możesz, użyj, pgrep
aby znaleźć PID.
Jednym z poleceń uruchamianych przez skrypt może być zalewkowanie SIGINT
, co prawdopodobnie CtrlCjest nieskuteczne. Nie SIGKILL
można go jednak uwięzić i zwykle jest to opcja ostateczna . Możesz spróbować SIGTERM
( -TERM
) przed zabiciem. Ani SIGKILL
czy SIGTERM
można ustawić jako skrót klawiaturowy droga SIGINT
jest.
Wszystko to jest dyskusyjne, jeśli twój skrypt nie zawiera linii shebang. Z tej SO odpowiedzi :
Zwykle powłoka nadrzędna zgaduje, że skrypt jest napisany dla tej samej powłoki (minimalne powłoki podobne do Bourne'a uruchamiają skrypt za pomocą / bin / sh, bash uruchamia go jako podproces bash) ...
Z tego powodu, gdy skrypt jest wykonywany, nie znajdziesz procesu o nazwie skryptu (lub procesu z nazwą skryptu w wierszu poleceń) i pgrep
zakończy się niepowodzeniem.
Zawsze używaj linii shebang.
Ctrl + z