1

コマンド置換でバックグラウンド ジョブの 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 を出力しません (バックグラウンド ジョブが手動で強制終了されない限り)。
4

1 に答える 1