Linux:根据参数杀死进程

Linux:根据参数杀死进程

如何根据命令行参数终止进程? killallpgrep、 和pkill似乎仅根据进程名称起作用。

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

这可以手动完成ps aux | grep myapp.jar,然后手动从输出中删除 pid,但我想要一个命令来自动执行等效操作。

答案1

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

答案2

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

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

答案3

您可以使用htop命令行参数查看当前正在运行的所有进程,并终止选定的进程。

答案4

如果你没有 pkill 或其他什么,只需使用 proc/[1-9]*/cmdline

grep -a myapp.jar /proc/[1-9]*/cmdline|tr '\0' ' '|grep -v grep|awk -F/ '{print $3}'

相关内容