すべての Linux プロセスは、終了中または終了が完了したときに EOF を stdout に書き込みますか?

すべての Linux プロセスは、終了中または終了が完了したときに EOF を stdout に書き込みますか?

shutdown -h 0Python モジュール (Python スクリプト内) を使用して Debian コンテナに送信するlxc(つまり、lxc でこのコマンドを実行する)pexpectときに問題が発生しています。このモジュールでは、ユーザーは特定のサブ文字列 (EOF など) を「期待」(= プロセス出力を待機) できますが、出力で EOF が認識されない理由をさらにデバッグできるようにするために、この質問が発生します。プロセスの終了を待機するには、プロセスの終了後に何を「期待」できるかを知る必要があります。モジュールはpexpectそのためのための非ブロッキング関数を隠しているため、単純にプロセスを待機することはできません。

モジュールpexpecthttp://www.bx.psu.edu/~nate/pexpect/pexpect.html#pexpect.spawn.expect詳細については、read システム コールでの EOF の受信を (duck)type でラップし、pexpect.expect(プロセスの可能な出力/フィードバックのカプセル化) で使用できるようにします。

私は、いくつかのプロセスがlsEOFで終了することが期待されているので、つまりpexpectEOFの意味(例)が翻訳元:)。

答え1

このコマンドを実行する代わりに、 を実行するか、ホストからこのコマンドを実行することshutdown -h 0をお勧めします。haltlxc-shutdown -n <name>

ソース:9.5 コンテナの監視とシャットダウン

答え2

EOF は、無限量のデータを提供する可能性のあるリソース (例: ストリーム) に、これ以上の入力が期待されないことを示します。この状況は、ストリーム (基盤となるシステム (OS またはランタイム環境など) によって定義されます) に 1 文字を書き込むことによって表現されることがよくあります。

プロセスはプロセス間通信にストリームを使用するため、出力の制限を示す必要があり、送信プロセスは EOF を使用して入力の制限を示す必要があります。基盤となるシステムは、この入力と出力を独自のプロセス処理メカニズムに転送し、EOF をプログラム内またはシステム上で評価できるようにします。

pexpect質問の使用例に関する注意: コンテナshutil.pexpectのファイルをコピーするには適していないようですlxc。スタックしてしまい、出力の時間オフセットによってpexpect混乱が生じます。

関連情報