我希望有一种方法可以杀死一个随机进程,该进程具有特定的名称(例如随机perl进程)。
最好的方法是什么?
我想使用以下类似代码:
ps aux | grep PROCESS-NAME
将其写入文件,然后随机选取一行,获取第二列(进程ID?)并将其终止。
对于我的用途,它并不需要是随机的,只要终止其中一个进程即可。使其随机只会更好。
我希望有一种方法可以杀死一个随机进程,该进程具有特定的名称(例如随机perl进程)。
最好的方法是什么?
我想使用以下类似代码:
ps aux | grep PROCESS-NAME
将其写入文件,然后随机选取一行,获取第二列(进程ID?)并将其终止。
对于我的用途,它并不需要是随机的,只要终止其中一个进程即可。使其随机只会更好。
看看 killall 命令的 -r 选项!
Bash单行代码 :-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`
sort
版本具有-R
随机排序选项,可以使您消除while
循环。您在一个地方使用awk
获取字段,在另一个地方使用cut
只是为了变化? - Dennis Williamson还有一个'pidof'命令,可以用来杀死进程:
kill `pidof processname`
杀死名为“my_proc_name”的进程:
kill -9 `ps xf | grep my_proc_name | grep -v grep | cut -d " " -f 1`
听起来你已经在正确的轨道上了。
你可以使用以下 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}'`
只需使用kill和awk命令。
kill $(ps -eo cmd,pid|awk '/zsh/&&!/awk/{pid[$NF]}END{for(i in pid){print i;exit}}')
在 END 块中的 for 循环将会给你一个随机的进程 ID 来杀掉它
使用最近的Bash Shell
#!/bin/bash
declare -a pid
pid=( $(pidof myprocess) )
length=${#pid}
rnumber=$((RANDOM%length+1))
rand=$((rnumber-1))
kill ${pid[$rand]}
使用pgrep和pkill怎么样?它们允许选择进程的很多选项。
也许有些离题,但我在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