在 linux 机器上,我最多运行 3 个 java jars 文件。如何用一个命令快速杀死所有 3 个?
通常我会:
ps ex - 让进程运行
然后找到进程ID然后执行:
杀死 -9 #### #### ####
有什么办法可以缩短这个过程?眯着眼睛寻找进程ID,我的眼睛很疼。
我的脚本执行以下操作:
nohup ./start-gossip &
nohup ./start &
nohup ./start-admin &
有没有办法在不查找的情况下获取每个进程的进程 ID?
简短的回答:
pkill java
这会查找要按名称杀死的进程(或多个进程)。这也会找到任何其他java进程,所以要小心。它也接受,但除非某些东西真的坏了,否则-9你应该避免使用。-9
编辑:
根据更新,您也可以指定脚本名称pkill(我不肯定)。但是,处理这个问题的更传统的方法是留下 pid 文件。在您启动一个新进程并将其后台运行后,它的 pid 在$!. 如果您将该 pid 写入文件,则很容易检查该进程是否仍在运行并仅终止您想要的进程。但是,pid 有可能被重用。
您可以在启动进程时保存 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
要获取该 java 进程的进程 ID,请运行
netstat -tuplen
您要杀死并运行的进程的进程 ID (PID)
杀死 -9 PID