Linux中是否有任何命令可以让我知道进程是否处于挂起状态。
Linux中是否有任何命令可以让我知道进程是否处于挂起状态。
没有命令,但有一次我不得不做一个非常愚蠢的黑客来完成类似的事情。我编写了一个 Perl 脚本,它定期(在我的例子中每 30 秒):
- run
ps
查找所监视进程的 PID 列表(以及执行时间等)
- 循环 PID
- start
gdb
使用 PID 附加到进程,使用以下命令转储堆栈跟踪thread apply all where
,脱离进程
- a process was declared hung if:
- 经过 3 次检查后,它的堆栈跟踪没有改变,时间也没有改变
- 其堆栈跟踪没有改变,并且在 3 次检查后时间显示 CPU 负载为 100%
- 挂起的进程被终止,以便监控应用程序有机会重新启动挂起的实例。
但这是非常非常非常粗暴的黑客行为,这样做是为了赶上即将错过的最后期限,几天后,在最终安装了对有缺陷的应用程序的修复后,它被删除了。
否则,正如所有其他响应者绝对正确地评论的那样,无法确定进程是否挂起:仅仅是因为挂起可能由于多种原因而发生,通常与应用程序逻辑有关。
唯一的方法是应用程序本身能够指示它是否还活着。最简单的方法可能是例如定期日志消息“我还活着”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)