STDINが開いていることを定期的に確認するには?

STDINが開いていることを定期的に確認するには?

一部のプログラムはSTDIN終了すると終了します。 「ポート」を通してErlang / Elixir監督の下でこれをうまくやっている人。

そうでない人のために、エリクサー文書次のラッパースクリプトを提案してください。

#!/bin/bash
# wrapper.sh
"$@" &
pid=$!
while read line ; do
  :
done
kill -KILL $pid

これを通してwrapper.sh my_script arg1 arg2。を呼び出すwrapper.shと、指定されたプログラムを起動してバックグラウンドで実行でき、swrapper.shが閉じるとブロックが終了し、バックグラウンドプロセスが終了します。STDINread

ただし、このアプローチには次の欠点があります。他の理由でバックグラウンドプロセスが終了した場合、wrapper.sh通知は表示されません。なのでErlang/Elixirにもありません。

このスクリプトを修正して次のことをしたいと思います。

ループで:

  • STDIN閉じたら殺す$pid
  • 死ぬと$pid退出
  • そうでなければ、しばらく寝てください。

誰でもこれを行う方法を提案できますか?

ベストアンサー1

$pid次のように死んでいることを確認できます。

while kill -0 $pid >/dev/null; do
    # $pid is still alive
done

# $pid is dead or you lack permissions to send signals to it

おすすめ記事