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

时间:2018-06-06 03:11:26

标签: linux bash process

环境描述

首先,我在后台执行bash-shell。并将 stdout stderr 写入日志文件./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

我们可以推测第3个程序将会启动,因为第2个程序已停止。事实上, bash-shell 第二个程序都因未知原因而终止。

线索2

我通过(... > ./out 2>&1)&离开了 stderr 。但我无法从日志文件中获取任何消息。我知道第二个程序暂时停止了。

结论

我想找到一个工具,可以通过特定的进程ID 或其他类似的解决方案来监控我的流程。

1 个答案:

答案 0 :(得分:1)

如果要使用其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