我不确定从我的应用程序衍生外部后台进程时是使用pty.fork()还是os.fork()。(例如国际象棋引擎)
如果父进程被杀死,我希望衍生的进程死亡,就像终端中的衍生应用程序一样。
两个分支之间的起伏是什么?
发布于 2009-12-18 01:36:24
使用os.fork()创建的子进程继承父进程的stdin/stdout/stderr,而使用pty.fork()创建的子进程连接到新的伪终端。当你在父进程中编写xterm:pty.fork()这样的程序时,你需要后者返回一个描述符来控制子进程的终端,这样你就可以可视化地表示其中的数据,并将用户操作转换为终端输入序列。
更新:
从pty(7)手册页:
希望连接到终端的进程,可以打开伪终端的从属端,然后由打开主端的程序驱动。写在主端的任何东西都会被提供给从端的进程,就好像它是在终端上输入的一样。例如,向主设备写入中断字符(通常为control-C)将导致为连接到从设备的前台进程组生成中断信号(SIGINT)。相反,写入伪终端的从机端的任何内容都可以被连接到主机端的进程读取。
发布于 2009-12-17 23:22:41
在过去,我总是使用subprocess模块来实现这一点。它为与子进程通信提供了一个很好的api。
您可以使用call(*popenargs, **kwargs)来阻止它们的执行,并且我相信使用Popen类可以处理异步执行。
有关更多信息,请查看docs。
就使用os.fork和pty.fork而言,两者都是高度依赖于平台的,并且都不能在windows上工作(或者至少是经过测试的)。通过读取文档,pty模块似乎是这两个模块中更受限制的一个。主要区别在于伪终端方面。因此,如果您不愿意以能够使用subprocess模块的方式构建代码,我可能会使用os.fork而不是pty.fork。
发布于 2012-08-04 08:25:46
对于某些真正需要终端的应用程序来说,伪terminal是必需的。交互式shell就是其中之一,但还有许多其他的示例。API选项不是作为另一个os.fork存在的,而是作为使用伪终端的特定API。
https://stackoverflow.com/questions/1922254
复制相似问题