一部のプログラムは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
が閉じるとブロックが終了し、バックグラウンドプロセスが終了します。STDIN
read
ただし、このアプローチには次の欠点があります。他の理由でバックグラウンドプロセスが終了した場合、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