我已经看到监视程序在脚本中使用“ps”或“服务状态(在 Linux 上)”定期检查进程状态,或者在 C/C++ 中分叉并等待进程......
我想知道是否可以使用带有陷阱的bash并在收到SIGCLD时重新启动子进程?
我已经按照以下想法在 RedHat Linux 上测试了一个基本套件(当然它没有工作......)
#!/bin/bash
set -o monitor # can someone explain this? discussion on Internet say this is needed
trap startProcess SIGCHLD
startProcess() {
/path/to/another/bash/script.sh & # the one to restart
while [ 1 ]
do
sleep 60
done
}
startProcess
正在启动的 bash 脚本只是休眠几秒钟然后退出。
观察到几个问题:
- 当 shell 在前台启动时,SIGCHLD 将只处理一次。陷阱复位信号处理是否像信号()?
- 脚本及其子进程似乎对 SIGINT 免疫,这意味着它们不能被 ^C 阻止
- 由于无法关闭,我关闭了终端。剧本似乎是HUP,留下了许多僵尸孩子。
- 在后台运行时,脚本导致终端死机
...无论如何,这根本不起作用。我不得不说我对这个话题知之甚少。有人可以建议或给出一些工作示例吗?有这种用途的脚本吗?
那么在 bash 中使用 wait 怎么样?
谢谢