因此,我有一些进程在服务器上运行后台作业(resque),其中一些作业启动了一个子进程,该进程有时会卡住。我发现如果我杀死了那个子进程,一切都会恢复正常。我们还有另一个脚本,如果执行时间过长,该脚本可能会终止二进制进程,但似乎在这里不起作用。通常我可以这样做:
killall --older-than 20m <process>
但是这些工人似乎有些棘手。这是它们在ps中的外观:
jbsmith@server:~$ ps aux | grep resque
www-data 17652 0.0 1.8 794148 145940 ? Sl 11:03 0:05 resque-1.26.0: Processing email since 1494525823 [Email]
www-data 1026 0.0 1.9 787712 157080 ? Sl 10:47 0:13 resque-1.26.0: Forked 17652 at 1494525823
“在x处分叉x”是子进程,是我需要杀死的进程。我是否可以使用一个衬板命令来查找可能与“ Forked”匹配且早于20分钟的进程并将其杀死?
“单线”,分为两行以减少滚动:
ps aux | awk -v cutoff=$(( $(date +%s) - 20 * 60 )) \
'/resque.*Forked [0-9]+ at [0-9]+/ { if ($NF < cutoff) system("kill " $2) }'
通过使用输出说明符ps
将输出限制为仅PID和COMM和ARG字段,然后专门匹配COMM和ARGS,可以使其更加严格,但是在我看来,假阳性匹配的风险似乎很小。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句