我试图创建一个程序,运行在后台,但可以很容易地暂停一个未暂停。这可以通过启动另一个副本来完成进度计划并使用暂停标志。我可以用这种方法成功地暂停和取消暂停我的程序。使用sig处理程序我可以输出到stdout “暂停程序” “恢复程序”
我启动程序,使用如下命令进行工作:
./prog.py -H foo -P bar -i 10
当我以
^{pr2}$这将引发一个标志,该标志调用
os.kill(%pid, signal.SIGSTOP)
所有的事情都会像它应该的那样暂停,但是第一次(而且只有第一次)我暂停它,我会将这种类型的输出输出到stdout:
[2]+ Stopped ./prog.py -H foo -P bar -i 10
我试图通过设置系统标准输出='/dev/null',但似乎不是这样。如果我搞不清楚这不是世界末日,我只是有点恼火,真的只想在父程序中看到暂停和恢复。有什么想法吗?在
打印这行不是python。在
当您挂起一个作业时,这一行由shell(
bash
)打印出来。在所以不能从python内部抑制。在
坏消息是,您也不能禁止从bash打印这些信息。见How to suppress Terminated message after killing in bash?的答案
如其他答案所述,这是由您的外壳打印的。shell监视它派生的每个子进程的状态。其中一个子进程是python程序。当它停止时,shell会得到通知(使用
SIGCHLD
),获取停止的子进程的终止状态,并打印该消息,让您知道其中一个正在运行的作业现在被挂起。在我不知道是否可以将bash配置为停止打印作业状态更改,但是您可以做一些其他的事情:在}的子元素),因此{}将不再关心它。在
prog.py
中,只需fork()
并在父级中退出,让子级保持活动状态。这会导致prog.py
成为init
的子元素(而不是{我不知道Python,但下面是一个用C编写的示例:
我相信您可以在Python中执行类似的操作。在
相关问题 更多 >
编程相关推荐