Linux进程在后台 – “停止”在工作?

我正在用&符号运行一个进程。

 $ example & 

但是,(请注意,我是一个Linux新手)我意识到,这样的命令后,我得到了一个笔记,我的过程收到了停止的信号几乎一秒钟。 如果我做

 $ jobs 

我会用我的示例过程中的一个小logging“停止”得到清单。 它是否真的停止了,而且根本不在后台工作? 它是如何工作的? 我从互联网得到混合信息。

在Linux和其他Unix系统中,一个在后台运行的作业,仍然有与其控制终端(也就是运行的窗口)相关联的stdin (或std::cin )将被发送一个SIGTTIN信号,默认情况下会导致程序完全停止,等待用户将其带到前台( fg %job或类似的),以允许输入实际上被赋予程序。 为了避免程序以这种方式暂停,您可以:

  1. 确保程序stdin通道不再与终端相关联,方法是将其重定向到一个具有适当程序输入内容的文件,或者如果它真的不需要输入,则返回到/dev/null – 例如myprogram < /dev/null &
  2. 启动程序后退出终端,这将导致与程序的stdin关联消失。 但是这会导致SIGHUP被传送到程序(意味着输入/输出通道经历了“挂断”) – 这通常会导致程序被终止,但是这可以通过使用nohup来避免 – 例如nohup myprogram &

如果你对捕获程序的输出感兴趣,这可能是最好的选择,因为它可以防止上述两种信号(以及其他两种信号),并保存输出以供您查看以确定是否程序执行有任何问题:

 nohup myprogram < /dev/null > ${HOME}/myprogram.log 2>&1 & 

是的,它真的停止了,不再在后台工作。 把它带回到生活类型fg job_number