バックグラウンドでw1
(ソースコードで)複数のプロセスインスタンスを実行しているとします(無限のwhileループを含む)。while1.c
while1.c
gcc while1.c -o w1
./w1&
./w1&
./w1&
./w1&
では、各インスタンスのPIDを取得したいと思います。このために私は次のようにしています。
var=$(/bin/ps r -o pid,cmd|grep "w1"| grep -v "grep"|awk '{print $1}')
w1
これは、すべてのインスタンスのPIDを保存します$var
。
その場合は、次のようにしてください。
echo $var
すべてのインスタンスのPIDを印刷しますw1
。
しかし、個々のPIDにアクセスしたいです。つまり:
echo ${var[0]}
echo ${var[1]}
など(配列など)。どうすればいいですか?
PS:echo ${var[0]}
すべてのPIDが印刷されますが、echo ${var[1]}
その他echo ${var[2]}
は何も印刷しません(出力の空白行など)。
ベストアンサー1
プロセスの開始時に PID を保存します。
pids=()
./w1 & pids+=( "$!" )
./w1 & pids+=( "$!" )
./w1 & pids+=( "$!" )
./w1 & pids+=( "$!" )
(シェルにbash
互換性のある配列構文があると仮定)
これで配列にPIDがあり、背中からpids
アクセスできます。"${pids[0]}"
"${pids[1]}"
一般を使用する場合/bin/sh
:
set --
./w1 & set -- "$@" "$!"
./w1 & set -- "$@" "$!"
./w1 & set -- "$@" "$!"
./w1 & set -- "$@" "$!"
今、あなたのPIDはリストにあり、背中から"$@"
アクセスすることができます。"$1"
"$2"
この特殊値は、"$!"
最後に開始されたバックグラウンドコマンドのPIDになります。