如何在 Linux 中监控进程并捕获意外终止?



环境说明

起初,我在后台执行一个 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-shell2nd 程序都因未知原因终止。

线索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

最新更新