如何在bash中快速杀死java进程?

iCo*_*unk 4 bash kill

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

通常我会:

ps ex - 让进程运行

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

kill -9 #### #### ####

有什么方法可以缩短这个过程吗?我眯着眼睛眯着眼睛看着过程ids.

我的脚本执行以下操作:

nohup ./start-gossip &

nohup ./start &

nohup ./start-admin &
Run Code Online (Sandbox Code Playgroud)

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

Fat*_*ror 15

简短回答:

pkill java
Run Code Online (Sandbox Code Playgroud)

这会查找按名称终止的进程(或进程).这也会找到任何其他java过程,所以要小心.它也接受-9,但你应该避免使用,-9除非有什么东西真的坏了.

编辑:

根据更新,您也可以指定脚本名称pkill(我不是肯定的).但是,处理这个问题的更传统的方法是留下pid文件.在您启动一个新流程并对其进行后台处理后,其pid可用于$!.如果您将该pid写入文件,则可以轻松检查进程是否仍在运行并仅删除您要处理的进程.但是,有可能重复使用pid.


dav*_*mac 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
Run Code Online (Sandbox Code Playgroud)

这样做的优点是(相对于pkill)不会杀死任何其他恰好具有相似名称的进程。如果您不想从脚本本身执行终止操作,而只想方便地使用 PID,请将它们写入文件(从脚本):

echo $START_GOSSIP_PID > /some/path/start_gossip.pid
Run Code Online (Sandbox Code Playgroud)

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

nohup ./start-gossip &
echo $! > /some/path/start_gossip.pid
Run Code Online (Sandbox Code Playgroud)