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