永遠に何もエレガントにしない方法は何ですか?

永遠に何もエレガントにしない方法は何ですか?

stdout私は有用な情報を生成し、そこから情報を読むプログラムを持っていますstdin。標準入力に何も提供せず、標準出力をファイルにリダイレクトしたいと思います。これまではとても素晴らしかったです。できます。

program > output

そしてttyでは何もしないでください。

しかし、問題は、これをバックグラウンドで実行したいということです。私がするなら:

program > output &

プログラムが一時停止します(「一時停止(tty入力)」)。

私がするなら:

program < /dev/null > output &

プログラムはEOFに到達し、すぐに終了します。

program私が必要とするものは何もせず、不確定な時間の間読んでいないものをパイプに接続するようですstdin。次の方法が有効です。

while true; do sleep 100; done | program > output &
mkfifo fifo && cat fifo | program > output &
tail -f /dev/null | program > output &

しかし、それはすべて非常に醜いです。そこ持つ標準のUnixユーティリティを使用して「無限に何もしない」(別の表現で)エレガントな方法ですman true。どうすればいいですか? (ここでのエレガンスの私の主な基準は、一時ファイルなし、忙しいスタンバイ、または定期的なウェイクアップなし、エキゾチックなユーティリティなし、できるだけ短いです)。

ベストアンサー1

私の考えでは、あなたはこれより良くなるとは思わない。

tail -f /dev/null

あなたはそれを提案しました(これが内部的にinotifyを使用していると仮定すると、ポーリングや目覚めがあってはいけないので、奇妙に見える以外は十分です)。

あなたは無限に実行され、標準出力を開いたままにしていますが、実際には標準出力に何も書き込まず、標準入力が閉じられたときに終了しないユーティリティが必要です。同様のものがyes実際に標準出力に書き込まれます。 cat標準入力が閉じると(またはリダイレクトされた内容が完了すると)終了します。私はsleep 1000000000dそれがうまくいくと思いますが、tail明らかに良いです。私のDebianボックスには、tailfコマンドを少し短くするコマンドがあります。

他の戦略を取り、プログラムを実行するのはどうですかscreen

おすすめ記事