Linux

所有 Linux 程序在終止/完成終止時是否將 EOF 寫入標準輸出?

  • June 30, 2014

我在使用 python模組(在 python 腳本中)發送shutdown -h 0lxcDebian 容器(即在 lxc 中執行此命令)時遇到問題。pexpect在這個模組中,使用者可以“期望”(=等待程序輸出)某個子字元串,其中包括 EOF,這導致我提出問題,以便能夠進一步調試為什麼在輸出中無法辨識 EOF。我需要知道在流程終止後我可以“期待”什麼,以便等待流程結束。我不能簡單地等待該過程,因為該pexpect模組為此隱藏了非阻塞功能。

pexpect模組(有關詳細資訊,請參見http://www.bx.psu.edu/~nate/pexpect/pexpect.html#pexpect.spawn.expect)將EOF的接收包裝在(鴨)類型的讀取系統呼叫中,並且使其可用於pexpect.expect(過程的可能輸出/回饋的封裝)。

我一直想知道,因為某些程序ls預計會以 EOF 終止,即 EOF 的pexpect意義(例如http://pexpect.sourceforge.net/pexpect.html)。

EOF 表示在可能提供無限量數據的資源(例如流)上不會有進一步的輸入。這種情況通常通過在流上寫入單個字元來表示(由底層系統(可能是作業系統或執行時環境)定義)。

由於程序使用流進行程序間通信,因此它們需要指示其輸出的限制,而發送程序需要使用 EOF 指示其輸入的限制。底層系統肯定會將此輸入和輸出轉發到其自己的程序處理機制,從而使 EOF 可用於在程序/系統上進行評估。

注意問題pexpect中的案例:shutil.pexpect似乎不適合複製lxc容器的文件。它卡住了,pexpect輸出的時間偏移導致混亂。

而不是執行這個shutdown -h 0命令,我建議halt改為執行,或者從主機執行這個命令,lxc-shutdown -n <name>.

來源:9.5 監控和關閉容器

引用自:https://unix.stackexchange.com/questions/139534