メインシェルが終了した後、>(プロセス)はどの信号を受け取りますか?

メインシェルが終了した後、>(プロセス)はどの信号を受け取りますか?

Bashが>(command)構文(プロセス置換など)を使用している場合は、ソリューションを提案することもできますが、これはZshellの問題です。この非常に基本的なコードはすべてを説明します。

% fun() {
   setopt localtraps
   trap "echo waiting >> /tmp/out; sleep 2; echo bye >> /tmp/out; exit 1;" EXIT
   echo "My PID: $sysparams[pid]"  # needs zsh/system module
   repeat 1000; do
      read -r -t 1 line
   done
}

% exec {MYFD}> >(fun)
% exit

上記のタスクは、fun()がトラップを受信し、/ tmp / outに2つのメッセージが表示され、「exit 1」がプロセスを終了することです。

私の質問:「EXIT」を実際の信号に置き換えることはできますか? PIPE、HUP、INT、TERMを試してみましたが、何も機能しませんでした。

ベストアンサー1

あなたのコードがすべてを説明しているわけではありません。あなたが何をしたいのかわかりません。しかし、タイトルの質問に答えることができます。>(…)メインシェルが終了すると、プロセスは信号を受信しません。組み込み関数が実行されるEXITまでトラップを実行するスクリプトの終わりに達するため、終了します。exit

各呼び出しが1秒ほどかかると思うので、スクリプトが早く終了すると思うならread -t 1、そうではありません。親プロセスが終了するとすぐに返されます。親プロセスが終了すると、readサブシェルの呼び出しは閉じたパイプからデータを読み取ろうとし、デフォルトのreadシステム呼び出しは利用可能なデータなしですぐに返されます。

おすすめ記事