我想为我的 Ubuntu 机器编写一个 shell 脚本,用于启动一些服务器应用程序。我需要这个脚本才能从我的 java 应用程序执行它。但我需要一种简单的方法来对所有这些服务器进程进行分组,以便稍后能够从我的 Java 应用程序中终止所有服务器进程。
我的想法是从 shell 脚本中设置父进程 ID,并在稍后的时间点使用命令杀死它们pkill
。
我如何通过 shell 脚本完成这一切?
答案1
您可以通过记下 Appium 服务器的 PID 来运行它们,稍后您可以用它来杀死它们。例如
Appium_server_1 & instance1=$!
Appium_server_2 & instance2=$!
Appium_server_3 & instance3=$!
.
.
.
然后你就可以杀死所有人实例变量与杀命令。
答案2
如果您的 shell 支持PPID
内置变量,那么您可以使用该变量,以防您确实对调用 shell 的进程的 PID 感兴趣。
如果您对该 shell 的 PID 非常感兴趣并且想将其提供给其他人,请使用$$
。
答案3
如果我正确理解你的问题,答案是你不能这样做。 java程序启动,调用shell脚本来启动更多进程。然后 shell 脚本结束,您希望将控制权传递给 java 进程,该进程应该能够关闭所有其他进程。
简短的回答是你不能这样做。当 shell 脚本终止时,由它启动的所有进程都将归进程号 1 (init) 而不是 java 进程所有。
您使用 shell 脚本启动额外进程是否有原因?
为什么不直接使用 java 来启动所有进程(使用 Process 库),或者使用类似supervisord(http://supervisord.org/)。然后您可以从java程序控制supervisord启动/停止进程。
如果所有进程的名称相同,您还应该能够使用killall 命令按名称杀死它们。