コマンド置換でバックグラウンド ジョブの PID を取得しようとしています。バックグラウンド ジョブは で開始されsetsid
ます。問題は、親プロセスがコマンド置換でヒットすることです。
スクリプトの例を次に示します。
#!/bin/bash
if [ "$1" = "start" ]; then
while true; do date > "bg.date"; sleep 1; done &
echo $!
exit 0
fi
pid="$(setsid "$0" start)"
echo "pid=$pid"
./script start
期待どおりに動作します (つまり、バックグラウンド ジョブの実行中にすぐに終了して bash プロンプトが表示されます)。setsid ./script start
期待どおりに動作します。- しかし
./script
、期待どおりに動作しません: PID を出力しません (バックグラウンド ジョブが手動で強制終了されない限り)。