hob*_*ave 16 linux kill process
首先,是的,我见过这个问题:
那里的答案不正确,不起作用。我已经投票并相应地发表了评论。
当列出时,我想杀死的进程如下所示ps aux | grep page.py:
阿帕奇424 0.0 0.1 6996 4564?S 07:02 0:00 /usr/bin/python2.6 /u/apps/pysnpp/current/bin/page.py 阿帕奇2686 0.0 0.1 7000 3460?S Sep10 0:00 /usr/bin/python2.6 /u/apps/pysnpp/current/bin/page.py 阿帕奇2926 0.0 0.0 6996 1404?S Sep02 0:00 /usr/bin/python2.6 /u/apps/pysnpp/current/bin/page.py 阿帕奇7398 0.0 0.0 6996 1400?S Sep01 0:00 /usr/bin/python2.6 /u/apps/pysnpp/current/bin/page.py 阿帕奇9423 0.0 0.1 6996 3824?S Sep10 0:00 /usr/bin/python2.6 /u/apps/pysnpp/current/bin/page.py 阿帕奇11022 0.0 0.0 7004 1400?S Sep01 0:00 /usr/bin/python2.6 /u/apps/pysnpp/current/bin/page.py 阿帕奇15343 0.0 0.1 7004 3788?S Sep09 0:00 /usr/bin/python2.6 /u/apps/pysnpp/current/bin/page.py 阿帕奇15364 0.0 0.1 7004 3792?S Sep09 0:00 /usr/bin/python2.6 /u/apps/pysnpp/current/bin/page.py 阿帕奇15397 0.0 0.1 6996 3788?S Sep09 0:00 /usr/bin/python2.6 /u/apps/pysnpp/current/bin/page.py 阿帕奇16817 0.0 0.1 7000 3788?S Sep09 0:00 /usr/bin/python2.6 /u/apps/pysnpp/current/bin/page.py 阿帕奇17590 0.0 0.0 7000 1432?S Sep07 0:00 /usr/bin/python2.6 /u/apps/pysnpp/current/bin/page.py 阿帕奇24448 0.0 0.0 7000 1432?S Sep07 0:00 /usr/bin/python2.6 /u/apps/pysnpp/current/bin/page.py 阿帕奇 30361 0.0 0.1 6996 3776 ? S Sep09 0:00 /usr/bin/python2.6 /u/apps/pysnpp/current/bin/page.py
我正在寻找设置一个简单的每日 cron 来查找并杀死任何page.py超过一个小时的进程。
上述问题的公认答案不起作用,因为它与时间范围不匹配,它只是匹配从 7 天到 7 天 23 小时 59 分 59 秒运行的进程。我不想杀死运行 1-2 小时的进程,而是杀死超过1 小时的任何进程。
上述问题的另一个答案 usingfind不起作用,至少在 Gentoo 或 CentOS 5.4 上不起作用,它要么发出警告,要么如果遵循所述警告的建议,则不返回任何内容。
Jod*_*e C 24
GNU Killall 可以使用进程名杀死超过给定年龄的进程。
if [[ "$(uname)" = "Linux" ]];then killall --older-than 1h page.py;fi
Run Code Online (Sandbox Code Playgroud)
感谢克里斯托弗的回答,我能够将其调整为以下内容:
find /proc -maxdepth 1 -user apache -type d -mmin +60 -exec basename {} \; \
| xargs ps | grep page.py | awk '{ print $1 }' | sudo xargs kill
Run Code Online (Sandbox Code Playgroud)
-mmin 是我缺少的 find 命令。
find 并不总是有效,并非每个系统都有可用的 etime,这可能是我的 regex newb 状态,但我认为您不需要比这更多的东西:
ps -eo pid,etimes,comm,user,tty | awk '{if ($4 ~ /builder/ && $5 ~ /pts/ && $2>600) print $1}'
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过管道将其杀死或进行任何您需要的操作。
# get elapsed time in seconds, filter our only those who >= 3600 sec
ps axh -O etimes | awk '{if ($2 >= 3600) print $2}'
Run Code Online (Sandbox Code Playgroud)
如果您愿意,您可以提供要ps在其中查找的 PID 列表,例如:
ps h -O etimes 1 2 3
Run Code Online (Sandbox Code Playgroud)