我写了这个脚本(我删除了一些无用的东西):
#!/bin/bash
readonly ARGS="$@"
catch() {
echo "Sigterm caught"
# Perform some cleanup instructions
# that suppose the child process is still alive
trap - SIGTERM # remove the trap
kill -s SIGINT -- -$$ # Sends SIGINT to child/sub processes
exit 0
}
main() {
trap "catch $5 $4" SIGTERM
./child_process_program # With all arguments needed
}
main $ARGS
我使用以下脚本启动此脚本:timeout "10s" ./my_script <arguments>
。
问题是 sigterm 也到达 child_process_program,因此假设子进程仍然存在的指令无法成功。
我已经看到了与答案非常相似的问题并尝试(不成功)更改 main 如下:
main() {
trap "catch $5 $4" SIGTERM
set -m
./child_process_program & # With all arguments needed
}
但我没有成功。我的问题有解决办法吗?