启动一个进程,启动另一个进程,然后终止第一个进程的 Shell 脚本

启动一个进程,启动另一个进程,然后终止第一个进程的 Shell 脚本

假设我在同一台机器上有一个clientserver,我想编写一些它们之间的交互脚本。

我真的很想要一个 shell 脚本来 -

  1. 开始server
  2. 置于server背景中
  3. 开始client
  4. (等待client做任何事情)
  5. 停止server

我已经可以做到大部分了,比如这样 -

./server &
./client

但是这样一来,server脚本运行结束后,除了其他问题之外,就非常混乱了。

我能做些什么?

答案1

您可以使用 bash 作业控制:

#!/bin/bash

./server &
./client
kill %1

确保将 放在#!/bin/bash脚本的开头,以便使用 bash 执行脚本(我不确定 sh 是否支持作业控制,如果支持,请纠正我)。

答案2

您可以使用标准 POSIX sh 实现相同的结果。在 sh 中,当您使用“&”在后台生成进程时,该进程的 PID 存储在特殊变量 $! 中。因此:

#!/bin/sh
./server &
./client
kill $!

对于更复杂的情况你可能需要保存 pid:

#!/bin/sh
./server &
serverpid=$!
# ... lots of other stuff
kill $serverpid

相关内容