5

私は Ubuntu で作業していて、次のことを行う bash ファイルを作成したいと考えています
。コア 1 で 1 つのプログラム (prog0) を起動します
。3 秒待ちます。
次に、prog0 の CPU およびメモリ使用量の情報をログに記録します (この情報をログに記録するために、コア 0 で pidstat の 2 つのインスタンスを使用します)。
次に、コア 0 で別のプログラム (prog1) を開始し
ます。prog1 が終了したら (prog1 は自動的に終了すると思います)、以前のすべてのプロセス (prog0 と 2 つの pidstat) を終了したいと思います。

taskset -c 1 prog0 -option0 &
sleep 3
taskset -c 0 pidstat 1 -C prog0 -u > log2 &
taskset -c 0 pidstat 1 -C prog0 -r > log3 &
taskset -c 0 prog1 -option1 > log1 

prog1 の終了時に開始されたすべてのプロセスを終了または強制終了する方法がわかりません。

4

2 に答える 2

6

追加:

trap 'kill $(jobs -p)' EXIT

スクリプトの先頭に。これにより、スクリプトが終了するときにすべてのバックグラウンド ジョブが強制終了されます。


スクリプトを作成するには、新しいファイルを開き、次を貼り付けます。

#!/bin/bash
trap 'kill $(jobs -p)' EXIT
taskset -c 1 prog0 -option0 &
sleep 3
taskset -c 0 pidstat 1 -C prog0 -u > log2 &
taskset -c 0 pidstat 1 -C prog0 -r > log3 &
taskset -c 0 prog1 -option1 > log1

としてファイルを保存しますrunme.sh

実行可能にします。chmod +x runme.sh

次を実行して実行します:./runme.shまたはバックグラウンドで実行するには:./runme.sh &

最後のコマンドtaskset -c 0 prog1 -option1 > log1が終了すると、スクリプトは終了し、開始したすべてのバックグラウンド プロセスを強制終了します。

于 2013-02-28T15:37:05.660 に答える
0

ほとんどのシステムで基本的なLinuxプログラムであるxargsを使用するのはどうですか

xargs -P 2 -I {} sh -c 'eval "$1"' - {} <<EOF
LD_LIBRARY_PATH=$HOME/vendor/usr/lib $HOME/vendor/usr/sbin/pgbouncer -v $HOME/vendor/etc/pgbouncer/pgbouncer.ini ; kill -15 $PPID
nameko run --config config.yaml $@ ; kill -15 $PPID
EOF

これにより、両方のコマンドが並行して実行され、いずれかが終了するまで終了しません。そのうちの 1 つが停止すると、親 PPID が強制終了され、それによって他の姉妹ジョブ/プロセス ジョブも強制終了されます。

私はこれを使用して CloudFoundry の問題を回避し、同時に 2 つのプロセスを開始し、アプリのプロセスが停止した場合にコンテナーをクラッシュさせるというルールを無視しません。

ここで回答に敬意を表します

于 2019-11-01T16:27:12.070 に答える