Linux进程在后台-作业“停止”了吗?
我当前正在运行带有&
标志的进程。
$ example &
但是,(请注意,我是Linux的新手)我意识到,在执行此命令后几乎一秒钟,我就收到一条消息,指出我的进程收到了停止的信号。如果我做
$ jobs
我将在示例过程中获得列表,并带有一个小注释“ Stopped”。它真的停止了并且在后台根本不工作吗?它是如何工作的?我从互联网上得到的信息不一。
回答:
在Linux和其他Unix系统中,正在后台运行但仍与其stdin
(或std::cin
)与其控制终端(也就是运行它的窗口)相关联的作业将被发送SIGTTIN
信号,默认情况下,该程序会完全停止,等待用户将其带到前台(fg
%job或类似位置)以允许将输入实际提供给程序。为避免程序被这种方式暂停,您可以:
- 通过将程序
stdin
通道重定向到具有适当内容以供程序输入的文件,或者将其重定向到/dev/null
确实不需要输入的文件(例如),以确保程序通道不再与终端关联myprogram < /dev/null &
。 - 启动程序后退出终端,这将导致与程序的关联
stdin
消失。但这将导致将aSIGHUP
传递给程序(这意味着输入/输出通道经历了“挂断”)-这通常会导致程序终止,但这可以通过使用nohup
-例如来避免nohup myprogram &
。
如果您对捕获程序的输出完全感兴趣,那么这可能是最好的选择,因为它可以防止上述两个信号(以及其他两个信号),并保存输出以供您确定是否程序执行有任何问题:
nohup myprogram < /dev/null > ${HOME}/myprogram.log 2>&1 &
以上是 Linux进程在后台-作业“停止”了吗? 的全部内容, 来源链接: utcz.com/qa/401856.html