Linux:根据参数终止进程


54

如何根据命令行参数终止进程? killall,,pgrep并且pkill似乎仅基于进程名称起作用。

我需要它能够区分在Java虚拟机中运行的许多应用程序java,所有虚拟机的进程名在哪里,并且可以通过查看命令行参数来找到实际的应用程序名。

可以使用手动完成此操作,ps aux | grep myapp.jar然后从输出中手动终止pid,但是我想使用一条命令来自动执行等效操作。

Answers:


69

pgrep/ pkill-f标记。从man页面:

-f    The pattern is normally only matched against the process name.
      When -f is set, the full command line is used.

例如:

$ sleep 30& sleep 60&
[1] 8007
[2] 8008

$ pkill -f 'sleep 30'
[1]  - terminated  sleep 30

$ pgrep sleep
8008

+1,但我的bash 4.1.5在&符后不适用于冒号(如示例的第一行所示)... bash: syntax error near unexpected token ';'...在跟号后跟... 的情况下,它确实适用于case语句;;您使用的是其他shell(?)
Peter.O 2012年

@ jw013我实际上在使用zsh,它支持我使用的语法。
不管怎样

@MichaelMrozek好吧,nvm :)我想知道unix.SE的zsh用户比例是否比其他地方更高-我似乎只zsh在这里找到用户。
jw013

4

您可以htop用来查看所有当前正在运行的进程及其命令行参数,并杀死选定的进程。


4

argument下面的正则表达式替换为必须包含进程的完整命令行的正则表达式:

kill `ps -eo pid,args --cols=10000 | awk '/argument/ && $1 != PROCINFO["pid"] { print $1 }'`

0

如果您没有任何技巧,只需使用proc / [1-9] * / cmdline

grep -a myapp.jar /proc/[1-9]*/cmdline|tr '\0' ' '|grep -v grep|awk -F/ '{print $3}'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.