我有这样一个简单的脚本,我执行一个. jar文件,我需要它的PID后,sleep
命令杀死它:java -jar test.jar &> output.txt & pid=$! sleep 10
问题是:应用程序完全启动后PID发生变化,我首先获得的这个PID与应用程序休眠10秒后的PID不同(我使用ps
检查)。
我怎样才能追踪到PID,以便我可以杀死完全启动的应用程序?
我试过使用pstree -p $pid
,但是我得到了一个很长的Java子进程列表,我想除了获取每个子进程,使用grep提取PID并杀死它之外,可能还有一种更好的方法来实现它,这也是因为我不能100%确定这是否有效。
我找到了另一个使用jps
的解决方案,但我更喜欢使用本地linux命令来兼容。
我不一定需要PID,使用进程名可能是一种方法,但我不知道如何检索,要么只有父进程的PID。
2条答案
按热度按时间iovurdzv1#
如果要使用进程名称,可能会运行:
选项详情:
kill
:发送kill信号(SIGTERM 15: Termination)
以正常终止任何进程。kill -9
:发送取消信号(SIGTERM 9:Kill)
立即终止任何进程。ps
:列出所有进程。grep
:筛选,[p]
防止实际grep进程显示在ps结果中。awk
:给出每行的第二个字段,即PID。(ps输出:$1:用户,$2:pid ...)3pvhb19x2#
两条路。
1.使用system.exit()内置函数。
或
1.将pid号重定向到一个文件,并在以后用于终止进程。
例如:-