「開かれ
た名前付きパイプの pid を取得する」 名前付きパイプには pid がなく、プロセスのみに pid があります (手がかりは 'p' にあります)
ただし、それは質問のタイトルとは何の関係もないようです。デフォルトでは、プロセスは SIGHUP で終了します。ただし、子プロセスは親のシグナル マスクを継承するため、親が SIGHUP を無視した場合は、子でも同様になります (ハンドラーには当てはまりません)。したがって、(たとえば)次のようにダイスを強制できます。
trap 'exit 128' SIGHUP
しかし、質問のその部分は、名前付きパイプとどのように関連していますか? パイプが開いているプロセスを見つけようとしていますか? そのために /proc を反復処理できます。
OPからのコメントの後に編集:
実行するcat > mypipe &
とcat
、キーボードにアクセスしようとしてハングします -cat
デフォルトでは STDIN を読み取ります。
[1]+ Stopped cat > mypipe
そのため、データを入力するために forground( fg
) に持ち込む必要があり、通常は で終了し<CTRL>+D
ます。なぜこのように使いたいのか、私には途方に暮れていますcat
。
とにかく、バックグラウンドで実行している場合、バックグラウンド ジョブの pid を取得するのは非常に簡単です。
ジョブ番号 1 であると仮定します。
set $(jobs -l %1)
pid=$2
ジョブをバックグラウンドで実行できない理由をさらに調査し、例を示すことができるかもしれません (script
コマンドを使用して、セッションのコピーを というファイルに取得しますtypescript
) 。