Bạn có vài lựa chọn. Một là dừng tập lệnh ( CtrlZ), lấy PID của tập lệnh và gửi SIGKILL
cho nhóm quy trình.
Khi một lệnh được thực thi trong shell, quá trình nó bắt đầu và tất cả các phần tử con của nó là một phần của cùng một nhóm quy trình (trong trường hợp này là nhóm quy trình tiền cảnh). Để gửi tín hiệu cho tất cả các quy trình trong nhóm này, bạn gửi nó cho người lãnh đạo quy trình. Đối với kill
lệnh, người lãnh đạo quá trình được ký hiệu như vậy:
kill -PID
Trong trường hợp PID
là quá trình ID của kịch bản.
Thí dụ:
Hãy xem xét một kịch bản test.sh
khởi chạy một số quy trình. Giả sử bạn chạy nó trong một cái vỏ:
$ ./test.sh
Trong một nhà ga khác,
$ 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)
Trong trường hợp này, để gửi tín hiệu đến nhóm quy trình được tạo bởi test.sh
, bạn sẽ làm:
kill -INT -17802
-INT
được sử dụng để gửi SIGINT
, và vì vậy lệnh này tương đương với việc nhấn CtrlCvào thiết bị đầu cuối. Gửi SIGKILL
:
kill -KILL -17802
Bạn chỉ cần dừng tập lệnh nếu bạn không thể mở một thiết bị đầu cuối khác. Nếu bạn có thể, sử dụng pgrep
để tìm ra PID.
Một trong những lệnh mà tập lệnh khởi chạy có thể bị kẹt SIGINT
, đó có thể là lý do tại sao CtrlCkhông hiệu quả. Tuy nhiên, SIGKILL
không thể bị mắc kẹt và nó thường là lựa chọn cuối cùng . Bạn có thể muốn thử SIGTERM
( -TERM
) trước khi giết. Không SIGKILL
hoặc SIGTERM
có thể được thiết lập như một bàn phím tắt đường SIGINT
là.
Tất cả điều này là moot nếu tập lệnh của bạn không chứa một dòng shebang. Từ câu trả lời SO này :
Thông thường, shell cha đoán rằng tập lệnh được viết cho cùng một trình bao (các shell giống như Bourne tối thiểu chạy tập lệnh với / bin / sh, bash chạy nó dưới dạng một quy trình con bash) ...
Vì điều này, khi tập lệnh được thực thi, bạn sẽ không tìm thấy một quy trình được đặt tên theo tập lệnh (hoặc một quy trình có tên của tập lệnh trong dòng lệnh) và pgrep
sẽ thất bại.
Luôn luôn sử dụng một dòng shebang.
Ctrl + z