Thử:
#!/bin/bash
_term() {
echo "Caught SIGTERM signal!"
kill -TERM "$child" 2>/dev/null
}
trap _term SIGTERM
echo "Doing some initial work...";
/bin/start/main/server --nodaemon &
child=$!
wait "$child"
Thông thường, bashsẽ bỏ qua mọi tín hiệu trong khi một tiến trình con đang thực thi. Bắt đầu từ các máy chủ với &ý chí nền nó vào hệ thống điều khiển công việc của vỏ, với $!tổ chức PID của máy chủ (được sử dụng với waitvà kill). waitSau đó, việc gọi sẽ chờ công việc với PID (máy chủ) được chỉ định kết thúc hoặc cho bất kỳ tín hiệu nào được kích hoạt .
Khi shell nhận được SIGTERM(hoặc máy chủ thoát độc lập), waitcuộc gọi sẽ trở lại (thoát với mã thoát của máy chủ hoặc với số tín hiệu + 128 trong trường hợp nhận được tín hiệu). Sau đó, nếu shell nhận được SIGTERM, nó sẽ gọi _termhàm được chỉ định là trình xử lý bẫy SIGTERM trước khi thoát (trong đó chúng tôi thực hiện bất kỳ việc dọn dẹp nào và truyền tín hiệu thủ công đến quy trình máy chủ bằng cách sử dụng kill).