所有 Linux 程序在終止/完成終止時是否將 EOF 寫入標準輸出?
我在使用 python模組(在 python 腳本中)發送
shutdown -h 0
到lxc
Debian 容器(即在 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 監控和關閉容器