后台Linux进程在作业中“已停止”?

我目前正在使用运行一个进程&amp符号

$example&

然而,(请注意,我是Linux的新手)我意识到,在发出这样的命令后,我收到一个通知,我的进程收到了一个停止信号。如果我这样做

$jobs

我将得到我的示例进程列表,并在其中加上一个小注释“Stopped”。它真的停止了并且在后台完全不工作了吗?它到底是如何工作的?我从互联网上得到的信息好坏参半

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

  1. 确保程序stdin频道不再与终端相关联,方法是将其重定向到包含适当内容的文件,以便程序输入,或者如果它确实不需要输入,则重定向到/dev/null,例如myprogram&lt/开发/空与空
  2. 启动程序后退出终端,这将导致与程序的stdin的关联消失。但这将导致SIGHUP发送到程序(意味着输入/输出通道经历了“挂起”)-这通常会导致程序终止,但这可以通过使用nohup来避免-例如nohup myprogram&amp

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

nohup myprogram&lt/dev/null&gt${HOME}/myprogram.log 2&gt&一,;

发表评论