Anda memiliki beberapa opsi. Salah satunya adalah menghentikan skrip ( CtrlZ), dapatkan PID skrip dan kirim SIGKILL
ke grup proses.
Ketika sebuah perintah dieksekusi dalam sebuah shell, proses itu dimulai dan semua anak-anaknya adalah bagian dari grup proses yang sama (dalam hal ini, grup proses latar depan). Untuk mengirim sinyal ke semua proses dalam grup ini, Anda mengirimkannya ke pemimpin proses. Untuk kill
perintah, pemimpin proses dilambangkan sebagai berikut:
kill -PID
Di mana PID
ID proses skrip.
Contoh:
Pertimbangkan skrip test.sh
yang meluncurkan beberapa proses. Katakanlah Anda menjalankannya di shell:
$ ./test.sh
Di terminal lain,
$ 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)
Dalam hal ini, untuk mengirim sinyal ke grup proses yang dibuat oleh test.sh
, Anda harus:
kill -INT -17802
-INT
digunakan untuk mengirim SIGINT
, dan perintah ini setara dengan menekan CtrlCpada terminal. Untuk mengirim SIGKILL
:
kill -KILL -17802
Anda hanya perlu menghentikan skrip jika Anda tidak dapat membuka terminal lain. Jika Anda bisa, gunakan pgrep
untuk menemukan PID.
Salah satu perintah yang diluncurkan skrip mungkin menjebak SIGINT
, yang mungkin mengapa CtrlCtidak efektif. Namun, SIGKILL
tidak dapat dijebak, dan ini biasanya merupakan pilihan terakhir . Anda mungkin ingin mencoba SIGTERM
( -TERM
) sebelum melakukan pembunuhan. Baik SIGKILL
atau SIGTERM
dapat diatur sebagai cara pintas keyboard seperti SIGINT
ini.
Semua ini bisa diperdebatkan jika skrip Anda tidak mengandung garis shebang. Dari jawaban SO ini :
Biasanya shell induk menebak bahwa script ditulis untuk shell yang sama (shell Bourne-like minimal menjalankan script dengan / bin / sh, bash menjalankannya sebagai subproses bash) ...
Karena itu, ketika skrip dieksekusi, Anda tidak akan menemukan proses yang dinamai skrip (atau proses dengan nama skrip di baris perintah) dan pgrep
akan gagal.
Selalu gunakan garis shebang.
Ctrl + z