[英]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.