用名称杀死随机进程
我想要一种杀死随名称的随机进程(例如随机perl进程)的方法。用名称杀死随机进程
这样做的最好方法是什么?
我thinkign使用像这样的:
ps aux | grep PROCESS-NAME
到一个文件,然后找到一个随机的行号,得到了第二列(进程ID?)并杀死。
对我来说,它并不需要是一个随机的,只要它杀死其中一个进程即可。随意使它变得更好。
猛砸一个班轮:-P
kill `ps auxww | grep zsh | awk '{print $2}' | while read line; do echo "$RANDOM $line"; done | sort | cut -d ' ' -f 2 | head -n 1`
现在很酷。我喜欢一件衬衫!我可以将它保存在记事本中,并在需要时将其粘贴,而不是将其另存为脚本。 – Hintswen 2009-12-13 07:36:57
你可以制作一个别名而不是副本,不是吗? – 2009-12-13 07:55:47
-1用于使用太多冗余工具+不必要的管道。 – ghostdog74 2009-12-13 08:00:08
听起来你已经走上了正轨。
您可以使用下面的perl脚本,它保存为randomline.pl,这将返回从什么管道输送到它的随机线
#!/usr/bin/perl
srand (time^$$^unpack "%L*", `ps axww | gzip`);
while (<>) { push(@_,$_); } print @_[rand()*@_];
然后运行下面的命令发送kill命令
kill `ps aux | grep PROCESS-NAME | perl randomline.pl | awk '{print $2}'`
您可能还想添加一些检查,可能是使用反向grep for root,以确保您不会尝试杀死与进程名称匹配的根级进程。
好的想法与检查。 – Hintswen 2009-12-13 07:37:34
另外还有“的pidof”命令,该命令可以用来杀死:
kill `pidof processname`
得到的只是一个当有多个进程以相同的名称,使用-s作为“单次拍摄”。
不会工作,多个进程具有相同的名称......所以他们都会同时被杀死。 – Hintswen 2009-12-13 08:19:45
好点。我将编辑我的评论,以展示如何将它用awk来挑选出一个进程。 – 2009-12-13 18:24:46
其实它有一个开关,-s。我编辑我的评论添加该选项 – 2009-12-13 18:28:19
只是杀死和awk。
kill $(ps -eo cmd,pid|awk '/zsh/&&!/awk/{pid[$NF]}END{for(i in pid){print i;exit}}')
的在END块循环会给你一个随机的kill命令来杀死
最近的bash shell
#!/bin/bash
declare -a pid
pid=($(pidof myprocess))
length=${#pid}
rnumber=$((RANDOM%length+1))
rand=$((rnumber-1))
kill ${pid[$rand]}
为什么你加1然后减1? – 2009-12-13 12:09:30
加1,使生成的rand数包含上限。那么它的-1因为pid数组索引从0开始。 – ghostdog74 2009-12-13 13:01:36
如何因此,使用pgrep和pkill的。他们允许很多选项来选择过程。
名称为 “my_proc_name” 杀进程:
kill -9 `ps xf | grep my_proc_name | grep -v grep | cut -d " " -f 1`
也许题外话,但我用这个在Cygwin。通过 Lev Victorovich Priyma’s answer
ps -W | awk '/calc.exe/,NF=1' | xargs kill -f
或
ps -W | awk '$0~z,NF=1' z=calc.exe | xargs kill -f
启发你可以得到有关ServerFault这个问题更好的答案。这个问题在http:// serverfault上有一个近乎重复的问题。com/questions/71360/find-and-kill-old-processes – 2009-12-13 07:35:13
好吧,我从来没有想过要在那里看看。上周才刚刚开始使用ServerFault。我试图检查Google并找不到它。 – Hintswen 2009-12-13 07:39:01