如果屏幕被取消,GNU Screen中的Python最终会变得空闲

uno*_*ode 9 python subprocess gnu-screen multiprocessing idle-processing

我有一个python脚本,它使用多处理和子进程与不同的参数并行启动多个外部命令.代码可以在这里找到.

为方便起见,我在GNU Screen会话中启动此脚本.运行此脚本的计算机有12个处理器,这些处理器在进程变为活动状态之前处于空闲

每个过程需要几个小时到几天才能运行,因此我经常断开与机器的连接并分离屏幕会话.

然而,最近我注意到了一种我以前从未体验过的行为.有几次我回到机器上,发现零负载是空闲的.如果我通过ps ux或获得活动进程列表,或者top我仍然可以在进程列表中找到脚本(和子进程).然后我重新连接屏幕会话以检查程序的状态,并立即将新的一批进程发送到队列,并且系统的负载在几秒钟内返回到12.请注意,除了重新连接屏幕会话之外,我对脚本完全没有任何作用.

我在系统上安装了一个监控工具,结果是一些流程在一段时间后完成并且没有启动新流程.因此系统处于活动状态,直到子进程忙,并且一旦没有更多的作业从队列中释放就变为空闲.

所以我的问题是,有没有人知道解释这种行为的任何原因?

编辑:大约一年后,这个问题不再可重现,无论是屏幕上的一些补丁还是python本身.我接受了答案,因为它为测试提供了良好的指导.

Bru*_*sky 4

我无法解释你所看到的原因。不过,我确实知道你下一步可以尝试什么。

  1. 尝试将脚本的输出通过管道传输到: | tee out.txt 如果没有效果,请尝试...
  2. 在另一个 [hop] 主机上运行 screen。从那里通过 SSH 连接到您的工作主机。在非模拟 shell 中运行脚本。然后随意断开连接并重新连接到您的跃点以检查该过程。这应该向工作人员隐藏屏幕无论如何都参与其中。

请回复这些测试的结果。这会让我有更多的时间继续前进。