Hãy nói tôi có cái này script.sh
#!/bin/bash
exit_script() {
echo "Printing something special!"
echo "Maybe executing other commands!"
kill -- -$$ # Sends SIGTERM to child/sub processes
}
echo "Some other text"
#other commands here
sleep infinity
Tôi muốn script.sh
thực thi chức năng exit_script
bất cứ khi nào nó nhận được SIGINT
hoặc SIGTERM
Ví dụ:
killall script.sh # it will send SIGTERM to my script
và tôi muốn kịch bản của mình thực thi điều này
exit_script() {
echo "Printing something special!"
echo "Maybe executing other commands!"
kill -- -$$ # Sends SIGTERM to child/sub processes
}
Tôi đã cố gắng thực hiện tính năng này bằng cách sử dụng trap
trap exit_script SIGINT SIGTERM
Người trả lời câu hỏi của tôi đã chứng minh tôi sai.
nhưng nó không hoạt động vì trap
dường như chỉ phản ứng với các tín hiệu được gửi đến các quá trình con / phụ. Khi mới bắt đầu, tôi không thể giải mã trap
trang người đàn ông nên có lẽ tôi đã bỏ lỡ giải pháp.
Tôi đoán đó là những gì các chương trình "thực" như Chromium làm khi bạn gửi chúng SIGTERM
Từ https://major.io/2010/03/18/sigterm-vs-sigkill/
Ứng dụng có thể xác định những gì nó muốn làm sau khi nhận được SIGTERM. Trong khi hầu hết các ứng dụng sẽ dọn sạch tài nguyên của họ và dừng lại, một số có thể không.