在Linux机器上,我最多运行3个java jar文件。如何使用一个命令快速杀死所有3个?
通常我会:
ps ex - 让进程运行
然后找到进程ID然后执行:
kill -9 #### #### ####
有什么方法可以缩短这个过程吗?我眯着眼睛看着流程ID,这让我很痛。
我的脚本执行以下操作:
nohup ./start-gossip &
nohup ./start &
nohup ./start-admin &
有没有办法在不查找的情况下获取每个进程ID?
答案 0 :(得分:15)
简短回答:
pkill java
这会查找按名称终止的进程(或进程)。这也会找到任何其他java
进程,所以要小心。它也接受-9
,但您应该避免使用-9
,除非某些内容确实已损坏。
编辑:
根据更新,您也可以将脚本名称指定为pkill
(我不是肯定的)。但是,处理这个问题的更传统的方法是留下pid文件。在您启动新流程并对其进行后台处理后,其pid可在$!
中找到。如果您将该pid写入文件,则可以轻松检查进程是否仍在运行并仅删除您要处理的进程。但是,有可能重复使用pid。
答案 1 :(得分: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
答案 2 :(得分:-1)
要获取该java进程的进程ID
netstat -tuplen
要杀死并运行的进程的进程ID(PID)
kill -9 PID