繁体   English   中英

使用名称杀死随机进程

[英]Kill random process with name

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

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

我有点想用这样的东西:

ps aux | grep PROCESS-NAME

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

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

看一下killall命令的-r选项!

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`

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

kill `pidof processname`

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

也许是偏离主题,但我在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

听起来你已经走上正轨了。

你可以使用下面的perl脚本,将它保存为randomline.pl,它会从输入到它的whats中返回一个随机行

#!/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,以确保您不会尝试终止与您的进程名称匹配的根级进程。

只是杀死和awk。

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

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

最近的bash shell

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

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

使用名称“my_proc_name”终止进程:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM