要約: インタラクティブなタスクをバックグラウンドで実行するには?
詳細: この単純なスクリプトを ash シェル (Busybox) でバックグラウンド タスクとして実行しようとしています。
myscript.sh&
ただし、スクリプトはすぐに停止します...
[1]+ 停止 (tty 入力) myscript.sh
myscript.sh の内容... (関連する部分のみ、それ以外は SIGINT、SIGHUP などをトラップします)
#!/bin/sh
catpid=0
START_COPY()
{
cat /dev/charfile > /path/outfile &
catpid = $!
}
STOP_COPY()
{
kill catpid
}
netcat SOME_IP PORT | while read EVENT
do
case $EVENT in
start) START_COPY;;
stop) STOP_COPY;;
esac
done
簡単なコマンド ライン テストから、bot cat と netcat が tty から読み取ろうとしていることがわかりました。この netcat バージョンには、tty を抑制するための -e がないことに注意してください。
myscript が停止しないようにするにはどうすればよいでしょうか。
私が成功せずに試したこと:
1) netcat/cat ... < /dev/tty (または の出力tty
)
2) () を使用してサブシェルで cat と netcat を含むブロックを実行します。これはうまくいくかもしれませんが、猫のPIDを取得する方法は?
あなたの専門家に...
問題はまだ存在します。皆さんが試す簡単なテスト:
1) 1 つのターミナルで netcat -l -p 11111 を実行します (& なし)
2) 別のターミナルで netcat localhost 11111 & を実行します (これはしばらくすると停止し、Stopped (TTY input) というメッセージが表示されます)
これを回避する方法は?