我有两个命令行程序,一个客户端应用程序和一个与之对话的服务器应用程序。
客户端依赖于后台运行的服务器。我可以通过以下方式启动:
java -jar server.jar & java -jar client.jar
然而,当我杀死客户端时,服务器仍然在后台。有没有办法将两者联系起来,这样如果客户端死了,服务器就会死掉?
答案 0 :(得分:2)
使用$!
在后台运行服务器作业并存储进程ID。然后运行客户端。
客户端退出后,使用存储的pid终止服务器,如下所示:
java -jar server.jar &
server=$!
java -jar client.jar
kill $server
更短:无需存储后台进程的PID,只有一个
java -jar server.jar &
java -jar client.jar
kill $!
答案 1 :(得分:1)
无法链接它们,但您可以明确地管理这些过程。
java -jar server.jar & server_pid=$!
java -jar client.jar
kill $server_pid
服务器在后台运行,然后客户端在前台运行。此时脚本会阻塞,因此当客户端退出时,脚本将继续执行下一个命令,该命令会终止服务器。