我目前正在运行一个带有&号的进程.

$ example &

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

$ jobs

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

推荐答案

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

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

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

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

Linux相关问答推荐

Aarch64在Linux上是否有红色区域,如果有,是16个字节还是128个字节?

为什么在Linux上STD::SLEEP_FOR(STD::Chrono::Hors::Max())会立即返回?

如何在带模式的文件频繁更改的管道中使用grep-f带模式的文件?

线程创建会在 Linux 中触发页面错误吗?它与软脏 PTE 有什么关系?

如何为命令的所有选项启用无密码 sudo?

另一个远程的 Git 合并分支

如何为 Linux 构建 Visual C++ 项目?

如何在 shell 脚本中动态生成新的变量名?

如何在 linux ElementaryOS 中修复 Genymotion,但未找到错误CXXABI_1.3.8

如何像 Nautilus 那样从命令行挂载?

bashrc 在运行 bash 命令之前不会加载

在 mac 上通过 ssh 连接到 amazon aws linux 服务器

如何仅打印 hexdump 中的十六进制值,而不打印行号或 ASCII 表?

将 jiffies 转换为毫秒

在 bash 中将输出作为 cp 的参数传递

解压tar tar.bz2 文件报错

如何从目录复制内容而不是符号链接?

如何将初始输入通过管道传输到随后将是交互式的进程中?

如何通过 xmllint 使用 XSD 验证 XML 文件

如何在 sed 中指定非捕获组?