所有 Linux 进程在终止/完成终止时都会将 EOF 写入 stdout 吗?

所有 Linux 进程在终止/完成终止时都会将 EOF 写入 stdout 吗?

我在使用 python模块(在 python 脚本中)发送shutdown -h 0lxcDebian 容器(即在 lxc 中执行此命令)时遇到问题。pexpect在这个模块中,用户可以“期望”(=等待进程输出)某个子字符串,其中包括 EOF,这让我想到了一个问题,以便能够进一步调试为什么在输出中无法识别 EOF。我需要知道进程终止后我可以“期望”什么,以便等待进程结束。我不能简单地等待该过程,因为该pexpect模块为此隐藏了非阻塞函数。

pexpect模块(参见http://www.bx.psu.edu/~nate/pexpect/pexpect.html#pexpect.spawn.expect有关详细信息)将 read 系统调用中 EOF 的接收包装在(duck)类型中,并使其可用于pexpect.expect(进程的可能输出/反馈的封装)。

我一直想知道,因为某些进程ls预计会以 EOF 终止,即pexpectEOF 的含义(例如http://pexpect.sourceforge.net/pexpect.html)。

答案1

shutdown -h 0我建议运行此命令halt,或者从主机运行此命令,而不是运行此命令lxc-shutdown -n <name>

来源:9.5 监控和关闭容器

答案2

EOF 表示在可能提供无限量数据的资源(例如流)上不再需要进一步输入。这种情况通常通过在流上写入单个字符来表示(由底层系统(可能是操作系统或运行时环境)定义)。

当进程使用流进行进程间通信时,它们需要指示其输出的限制,并且发送进程需要使用 EOF 指示其输入的限制。底层系统肯定会将此输入和输出转发到其自己的进程处理机制,使 EOF 可用于程序/系统上的评估。

请注意pexpect问题中的用例:shutil.pexpect似乎不适合复制lxc容器的文件。它被卡住了,输出的时间偏移pexpect导致了混乱。

相关内容