环境说明
起初,我在后台执行一个 bash-shell。并将标准输出和标准输出写入日志文件./out
。
(bash ./myshell.sh > ./out 2>&1)&
在 shell 中将依次运行多个程序,如Node.js。
node program.js --number 1
node program.js --number 2
node program.js --number 3
...
我可以通过ps
检查进度状态,下面是一个示例:
$ ps ux | grep shell
user 10001 (skipped...) bash ./myshell.sh
$ ps ux | grep node
user 10002 (skipped...) node program.js --number 1
问题
然后,也许运行正在进行的第二个程序,进程将被终止(或终止(。
线索1
我们可以推测第三个程序会启动,因为第二个程序停止了。事实上,bash-shell和2nd 程序都因未知原因终止。
线索2
我通过(... > ./out 2>&1)&
离开了stderr。但是我无法从日志文件中获取任何消息。我只知道第二个程序在一瞬间停止了。
结论
我想找到一个可以通过特定进程 ID或其他类似解决方案来监控我的进程的工具。
如果要使用进程的 ID 检查进程是否仍然存在,则可以使用如下所示的内容:
kill -0 $pid
此处的-0
将否定 kill 命令,而是给出输出。
或者,如果您确实想对退出代码进行操作,忽略kill
输出,则可以执行更多编程操作:
if ! kill $pid > /dev/null 2>&1; then
echo "Could not send SIGTERM to process $pid" >&2
fi