如何在shell脚本中终止一个刚刚启动的Java进程?

0ejtzxu1  于 2023-01-09  发布在  Shell
关注(0)|答案(2)|浏览(203)

我有这样一个简单的脚本,我执行一个. 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。

iovurdzv

iovurdzv1#

如果要使用进程名称,可能会运行:

$ kill -9 $(ps aux | grep '[t]est.jar' | awk '{print $2}')

选项详情:

  • kill:发送kill信号(SIGTERM 15: Termination)以正常终止任何进程。
  • kill -9:发送取消信号(SIGTERM 9:Kill)立即终止任何进程。
  • ps:列出所有进程。
  • grep:筛选,[p]防止实际grep进程显示在ps结果中。
  • awk:给出每行的第二个字段,即PID。(ps输出:$1:用户,$2:pid ...)
3pvhb19x

3pvhb19x2#

两条路。
1.使用system.exit()内置函数。

1.将pid号重定向到一个文件,并在以后用于终止进程。
例如:-

java -jar test.jar &> output.txt & echo $! > pid-logs
cat pid-logs | xargs kill -9

相关问题