如何根据经过的时间杀死 Linux 节点进程?
Posted
技术标签:
【中文标题】如何根据经过的时间杀死 Linux 节点进程?【英文标题】:How to kill Linux node processes based on their elapsed time? 【发布时间】:2021-06-01 03:09:00 【问题描述】:我刚刚完成了一个使用 puppeteer 和 node 制作的网络抓取应用程序,此时它非常不稳定,因为 puppeteer 的经验相对较低甚至没有(关于它崩溃的进一步调试即将到来)。有时,当运行该应用程序的多个实例时,其中一个会崩溃,并且该节点进程不会终止,它会永远保持运行状态,或者直到我手动终止它。
我正在使用:ps -e | grep node
来检测所有节点进程,并使用:pkill -f node
来杀死每个进程。深入研究,我发现了这个:ps -eo pid,comm,lstart,etime,time,args
,它返回每个 Linux 进程。 time
参数返回进程经过的时间。现在我的问题是:有没有办法只杀死那些经过时间大于 5 分钟的节点进程?
puppeteer 脚本的正常运行通常在 3-4 分钟左右完成工作,具体取决于它必须抓取的信息量。
请帮忙!谢谢!
【问题讨论】:
【参考方案1】:所以...建立在您的 ps
调用之上:
ps -eo pid,comm,lstart,etime,time,args | awk '$10~/node/split($8,a,/[-:]/);min=a[length(a)-1];if(min>=5)print $1' |xargs -i echo "kill "
您可以使用 awk 进行一些后期处理。
如果第10个字段包含单词节点,则将etime
根据分隔符[-:]
拆分成数组a
;倒数第二个元素始终是分钟。如果倒数第二个元素 >=5,则打印相应的 PID。使用 xargs 处理 awk 的输出...我正在回显“kill”和 pid,因为我不想在测试中杀死随机进程。
如果测试输出看起来正常,请将xargs -i echo "kill "
更改为xargs -i kill
【讨论】:
我明天在工作中试试这个,我会回复的。感谢您的回复! 抱歉回复晚了。它工作得很好。感谢您的帮助!以上是关于如何根据经过的时间杀死 Linux 节点进程?的主要内容,如果未能解决你的问题,请参考以下文章