it-swarm-ja.com

プロセスを開始し、別のプロセスを開始し、最初のプロセスを強制終了するシェルスクリプト

同じマシン上にclientserverがあり、それらの間の相互作用をスクリプト化したいとします。

シェルスクリプトを本当に欲しいのですが-

  1. 開始server
  2. serverをバックグラウンドに配置します
  3. 開始client
  4. clientが何でもするのを待ちます)
  5. 停止server

私はそのほとんどをすでにこのように行うことができます-

./server &
./client

しかし、それはスクリプトが終了した後にserverを実行したままにします。これは、他のことは別として、非常に乱雑です。

私に何ができる?

3
Jez

Bashジョブ制御を使用できます。

#!/bin/bash

./server &
./client
kill %1

必ず#!/bin/bashスクリプトの先頭で、bashを使用してスクリプトを実行します(ジョブ制御がshでサポートされているかどうかはわかりません。サポートされている場合は、修正してください)。

5
Wuffers

標準のPOSIXshでも同じ結果を得ることができます。 shでは、「&」を使用してバックグラウンドでプロセスを生成すると、プロセスのPIDが特別な変数$!に格納されます。そう:

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

より複雑な状況では、pidを保存することをお勧めします。

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