我正在用&
符号运行一个进程。
$ example &
但是,(请注意,我是一个Linux新手)我意识到,这样的命令后,我得到了一个笔记,我的过程收到了停止的信号几乎一秒钟。 如果我做
$ jobs
我会用我的示例过程中的一个小logging“停止”得到清单。 它是否真的停止了,而且根本不在后台工作? 它是如何工作的? 我从互联网得到混合信息。
在Linux和其他Unix系统中,一个在后台运行的作业,仍然有与其控制终端(也就是运行的窗口)相关联的stdin
(或std::cin
)将被发送一个SIGTTIN
信号,默认情况下会导致程序完全停止,等待用户将其带到前台( fg %job
或类似的),以允许输入实际上被赋予程序。 为了避免程序以这种方式暂停,您可以:
stdin
通道不再与终端相关联,方法是将其重定向到一个具有适当程序输入内容的文件,或者如果它真的不需要输入,则返回到/dev/null
– 例如myprogram < /dev/null &
。 stdin
关联消失。 但是这会导致SIGHUP
被传送到程序(意味着输入/输出通道经历了“挂断”) – 这通常会导致程序被终止,但是这可以通过使用nohup
来避免 – 例如nohup myprogram &
。 如果你对捕获程序的输出感兴趣,这可能是最好的选择,因为它可以防止上述两种信号(以及其他两种信号),并保存输出以供您查看以确定是否程序执行有任何问题:
nohup myprogram < /dev/null > ${HOME}/myprogram.log 2>&1 &
是的,它真的停止了,不再在后台工作。 把它带回到生活类型fg
job_number