我想用一种方法来杀死一个带有名字的随机进程(例如一个随机的perl进程)。
这样做的最佳方式是什么?
我有点想使用这样的东西:
ps aux | grep PROCESS-NAME
到一个文件,然后找到一个随机行号,获取第二列(进程ID?)并将其删除。
对于我的使用它实际上不需要是随机的,只要它杀死其中一个进程。随意使它变得更好。
答案 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