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


3

让我们想象一下我在同一台机器上有一个client和一个server机器,我想编写它们之间的一些交互。

我真的很喜欢shell脚本 -

  1. 开始 server
  2. 放在server后台
  3. 开始 client
  4. (等待client做任何事情)
  5. 停止 server

我已经可以做大部分了,就像这样 -

./server &
./client

但是,server在脚本完成之后,它会继续运行,除了其他任何东西,它都是非常不整洁的。

我能做什么?

Answers:


5

您可以使用bash作业控制:

#!/bin/bash

./server &
./client
kill %1

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


没问题!乐意效劳!
2011年

2

您可以使用标准POSIX sh获得相同的结果。在sh中,当你使用'&'在后台生成一个进程时,进程的PID存储在特殊变量$!中。所以:

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

对于更复杂的情况,您可能希望保存pid:

#!/bin/sh
./server &
serverpid=$!
# ... lots of other stuff
kill $serverpid
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.