如何根据运行时间杀死 Linux 个节点进程?
How to kill Linux node processes based on their elapsed time?
我刚刚完成了一个用 puppeteer 和 node 制作的网络抓取应用程序,由于 none 对 puppeteer 的经验相对较少,目前它非常不稳定(即将对其崩溃进行进一步调试).有时,当 运行 连接该应用程序的多个实例时,其中一个崩溃并且该节点进程不会终止,它将永远保持运行或直到我手动终止它。
我正在使用:ps -e | grep node
来检测所有节点进程,并且:pkill -f node
来终止每个进程。深入挖掘,我发现了这个:ps -eo pid,comm,lstart,etime,time,args
,每个 Linux 进程 returns。 time
参数 returns 进程经过的时间。现在我的问题是:有没有办法只杀死那些经过时间大于 5 分钟的节点进程?
一个普通的 运行 puppeteer 脚本通常在 3-4 分钟内完成工作,具体取决于它必须抓取的信息量。
请帮忙!谢谢!
所以...在您的 ps
调用的基础上进行构建:
ps -eo pid,comm,lstart,etime,time,args | awk '~/node/{split(,a,/[-:]/);min=a[length(a)-1];if(min>=5){print }}' |xargs -i echo "kill "{}
您可以使用 awk 进行一些 post 处理。
如果第10个字段包含单词节点,则根据分隔符[-:]
将etime
拆分为数组a
;倒数第二个元素将始终是分钟。如果倒数第二个元素 >=5,则打印相应的 PID。使用 xargs 处理 awk 的输出...我正在回应“kill”和 pid,因为我不想在我的测试中杀死随机进程。
如果测试输出看起来正常,请将 xargs -i echo "kill "{}
更改为 xargs -i kill {}
我刚刚完成了一个用 puppeteer 和 node 制作的网络抓取应用程序,由于 none 对 puppeteer 的经验相对较少,目前它非常不稳定(即将对其崩溃进行进一步调试).有时,当 运行 连接该应用程序的多个实例时,其中一个崩溃并且该节点进程不会终止,它将永远保持运行或直到我手动终止它。
我正在使用:ps -e | grep node
来检测所有节点进程,并且:pkill -f node
来终止每个进程。深入挖掘,我发现了这个:ps -eo pid,comm,lstart,etime,time,args
,每个 Linux 进程 returns。 time
参数 returns 进程经过的时间。现在我的问题是:有没有办法只杀死那些经过时间大于 5 分钟的节点进程?
一个普通的 运行 puppeteer 脚本通常在 3-4 分钟内完成工作,具体取决于它必须抓取的信息量。
请帮忙!谢谢!
所以...在您的 ps
调用的基础上进行构建:
ps -eo pid,comm,lstart,etime,time,args | awk '~/node/{split(,a,/[-:]/);min=a[length(a)-1];if(min>=5){print }}' |xargs -i echo "kill "{}
您可以使用 awk 进行一些 post 处理。
如果第10个字段包含单词节点,则根据分隔符[-:]
将etime
拆分为数组a
;倒数第二个元素将始终是分钟。如果倒数第二个元素 >=5,则打印相应的 PID。使用 xargs 处理 awk 的输出...我正在回应“kill”和 pid,因为我不想在我的测试中杀死随机进程。
如果测试输出看起来正常,请将 xargs -i echo "kill "{}
更改为 xargs -i kill {}