node.js - 如何根据经过的时间杀死 Linux 节点进程?
问题描述
我刚刚完成了一个用 puppeteer 和 node 制作的网络抓取应用程序,此时它非常不稳定,因为 puppeteer 的经验相对较低甚至没有(进一步的调试即将崩溃)。有时,当运行该应用程序的多个实例时,其中一个会崩溃,并且该节点进程不会终止,它将永远保持运行状态,或者直到我手动终止它。
我正在使用:ps -e | grep node
检测所有节点进程和:pkill -f node
杀死每个进程。深入研究,我发现了这个:ps -eo pid,comm,lstart,etime,time,args
,它返回每个 Linux 进程。该time
参数返回进程的经过时间。现在我的问题是:有没有办法只杀死那些经过时间大于 5 分钟的节点进程?
puppeteer 脚本的正常运行通常在 3-4 分钟左右完成工作,具体取决于它必须抓取的信息量。
请帮忙!谢谢!
解决方案
所以......建立在你的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
为数组;倒数第二个元素始终是分钟。如果倒数第二个元素 >=5,则打印相应的 PID。使用 xargs 处理 awk 的输出...我正在回显“kill”和 pid,因为我不想在测试中杀死随机进程。a
[-:]
如果测试输出看起来很正常,请更改xargs -i echo "kill "{}
为xargs -i kill {}
推荐阅读
- android - 使用重力居中复选框和文本标签 = 中心
- python - Python 排序,不排序数据
- android - 如何从 Android(Gradle)应用程序中排除 cglib 依赖项?
- c# - 如何在带有属性设置的 if 语句中使用字符串?
- jquery - devbridge/jQuery-Autocomplete 如何将数据部分转换为提交值
- angularjs - 带有 AngularJS 和输入的 Bootstrap Popover
- java - BottomNavigationViewEx 空指针异常
- azure - 清理 Packer 的 Azure 构建器的图像名称的函数
- jquery - Yii2 - 如何使用下拉列表隐藏块
- django - Django无法连接到docker中的redis