假设我在同一台机器上有一个client
和server
,我想编写一些它们之间的交互脚本。
我真的很想要一个 shell 脚本来 -
- 开始
server
- 置于
server
背景中 - 开始
client
- (等待
client
做任何事情) - 停止
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