3

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

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

我想使用这样的东西:

ps aux | grep PROCESS-NAME

到一个文件,然后找到一个随机行号,获取第二列(进程ID?)并杀死它。

就我的使用而言,它实际上不需要是随机的,只要它杀死其中一个进程即可。让它随机只会让它变得更好。

4

9 回答 9

7

查看 killall命令的 -r 选项!

于 2009-12-13T07:27:18.813 回答
4

重击单线:-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`
于 2009-12-13T07:31:46.077 回答
2

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

kill `pidof processname`

当有多个同名进程时,要只获取一个进程,请使用 -s 表示“单次”。

于 2009-12-13T07:46:56.690 回答
0

使用 pgrep 和 pkill 怎么样。它们允许有很多选项来选择流程。

于 2009-12-14T01:22:14.170 回答
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,以确保您不会尝试杀死与您的进程名称匹配的根级别进程。

于 2009-12-13T07:30:00.310 回答
0

只是杀死和awk。

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

END 块中的 for 循环会给你一个随机的 pid 来杀死

于 2009-12-13T08:06:50.843 回答
0

使用最近的 bash shell

#!/bin/bash
declare -a pid
pid=( $(pidof myprocess) )
length=${#pid}
rnumber=$((RANDOM%length+1))
rand=$((rnumber-1))
kill ${pid[$rand]}
于 2009-12-13T08:25:52.483 回答
0

杀死名为“my_proc_name”的进程:

kill -9 `ps xf | grep my_proc_name | grep -v grep | cut -d " " -f 1`
于 2012-03-02T09:50:42.620 回答
0

也许题外话,但我在 Cygwin 上使用它。灵感来自 Lev Victorovich Priyma 的回答

ps -W | awk '/calc.exe/,NF=1' | xargs kill -f

或者

ps -W | awk '$0~z,NF=1' z=calc.exe | xargs kill -f
于 2012-05-17T23:20:14.410 回答