使用名称杀死随机进程

时间:2009-12-13 07:18:49

标签: linux bash shell kill

我想用一种方法来杀死一个带有名字的随机进程(例如一个随机的perl进程)。

这样做的最佳方式是什么?

我有点想使用这样的东西:

ps aux | grep PROCESS-NAME

到一个文件,然后找到一个随机行号,获取第二列(进程ID?)并将其删除。

对于我的使用它实际上不需要是随机的,只要它杀死其中一个进程。随意使它变得更好。

9 个答案:

答案 0 :(得分:7)

查看killall命令的-r选项!

答案 1 :(得分:4)

Bash one-liner :-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`

答案 2 :(得分:2)

还有'pidof'命令,可以用来杀死:

kill `pidof processname`

当有多个具有相同名称的进程时,只进行一个进程,使用-s进行“单次射击”。

答案 3 :(得分:0)

听起来你已经走在正确的轨道上了。

你可以使用下面的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}'`

您可能还想添加一些检查,可能使用针对root的反向grep,以确保您不会尝试终止与您的进程名称匹配的根级进程。

答案 4 :(得分:0)

只是杀死和awk。

kill $(ps -eo cmd,pid|awk '/zsh/&&!/awk/{pid[$NF]}END{for(i in pid){print i;exit}}')

END块中的for循环将为你提供一个随机pid来杀死

答案 5 :(得分:0)

使用最近的bash shell

#!/bin/bash
declare -a pid
pid=( $(pidof myprocess) )
length=${#pid}
rnumber=$((RANDOM%length+1))
rand=$((rnumber-1))
kill ${pid[$rand]}

答案 6 :(得分:0)

如何使用pgrep和pkill。他们允许很多选项来选择流程。

答案 7 :(得分:0)

使用名称“my_proc_name”杀死进程:

kill -9 `ps xf | grep my_proc_name | grep -v grep | cut -d " " -f 1`

答案 8 :(得分:0)

可能偏离主题,但我在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