使用较长的处理时间自动识别(和终止)进程

时间:2013-10-03 19:03:05

标签: kill cpu-time

我正在运行一个脚本,每天下载,构建和检查我正在贡献的程序。 “检查”部分意味着执行一系列测试运行并将结果与​​参考值进行比较。

只要程序结束(有或没有错误),一切都OK(我的意思是我可以处理)。但是在某些情况下,一些测试运行显然停留在无限循环中,我必须杀死它。这对于应该无人看管的工作来说非常不方便。如果在某些时候发生这种情况,测试将不再进一步发展,更糟糕的是,第二天将启动一项新工作,这可能会遇到同样的问题。

手动,我可以识别“卡住”过程,例如,使用ps -u username,在TIME列中超过15分钟的任何内容都应该被杀死。 请注意,这不仅仅是流程的“年龄”,而是使用的处理时间。我不想杀死包装器脚本或ssh会话。

在尝试编写一些定期运行ps -u username的复杂脚本之前,解析输出并杀死需要杀死的内容,是否有一些更容易或预先解决的解决方案?

编辑:

从建议线程中的回复中,我已将此行添加到用户的crontab中,这似乎可以工作到目前为止:

10,40 * * * * ps -eo uid,pid,time | egrep '^ *`id -u`' | egrep ' ([0-9]+-)?[0-9]{2}:[2-9][0-9]:[0-9]{2}' | awk '{print $2}' | xargs -I{} kill {}

它每半小时运行一次(*:10和*:40),识别属于用户的进程(反引号中为id -u,因为$UID在破折号中不可用)并且具有处理时间超过20分钟([2-9][0-9]),并将其杀死。

时间分析并不完美,它不会捕获已经运行了几个小时且不到20分钟的进程,但是因为它每30分钟运行一次不应该发生。

0 个答案:

没有答案