5

在 linux 机器上,我最多运行 3 个 java jars 文件。如何用一个命令快速杀死所有 3 个?

通常我会:

ps ex - 让进程运行

然后找到进程ID然后执行:

杀死 -9 #### #### ####

有什么办法可以缩短这个过程?眯着眼睛寻找进程ID,我的眼睛很疼。

我的脚本执行以下操作:

nohup ./start-gossip &

nohup ./start &

nohup ./start-admin &

有没有办法在不查找的情况下获取每个进程的进程 ID?

4

3 回答 3

17

简短的回答:

pkill java

这会查找要按名称杀死的进程(或多个进程)。这也会找到任何其他java进程,所以要小心。它也接受,但除非某些东西真的坏了,否则-9你应该避免使用。-9

编辑:

根据更新,您也可以指定脚本名称pkill(我不肯定)。但是,处理这个问题的更传统的方法是留下 pid 文件。在您启动一个新进程并将其后台运行后,它的 pid 在$!. 如果您将该 pid 写入文件,则很容易检查该进程是否仍在运行并仅终止您想要的进程。但是,pid 有可能被重用。

于 2013-03-19T19:10:17.790 回答
1

您可以在启动进程时保存 PID,以便以后使用它们:

nohup ./start-gossip &
START_GOSSIP_PID=$!

nohup ./start &
START_PID=$!

nohup ./start-admin &
START_ADMIN_PID=$!

...

kill -9 $START_GOSSIP_PID
kill -9 $START_PID
kill -9 $START_ADMIN_PID

这样做的好处是(超过pkill)不会杀死任何其他巧合名称相似的进程。如果您不想从脚本本身执行 kill 操作,而只想方便地使用 PID,请将它们写入文件(从脚本):

echo $START_GOSSIP_PID > /some/path/start_gossip.pid

或者甚至只是在启动进程时执行此操作,而不是将 PID 保存到变量中:

nohup ./start-gossip &
echo $! > /some/path/start_gossip.pid
于 2016-10-17T13:42:06.447 回答
-1

要获取该 java 进程的进程 ID,请运行

netstat -tuplen

您要杀死并运行的进程的进程 ID (PID)

杀死 -9 PID

于 2016-10-17T12:57:29.270 回答