在后台运行进程意味着什么?

在后台运行进程意味着什么?

在后台运行进程到底意味着什么?

$program和之间的区别 $program&:是否只是输入文件描述符不是从 shell 继承的,还是还有其他/更多的东西?

答案1

program &仍将具有相同的stdinstdoutas program,但program &通常(取决于您的终端设置)将无法读取,stdin除非系统通过SIGTTIN信号停止(请参阅https://en.wikipedia.org/wiki/Job_control_(Unix)#Implementation)。

后台进程不会接收来自键盘快捷键 ( Ctrl-C, Ctrl-\, Ctrl-Z) 的信号,当然,在后台运行进程将允许您继续使用 shell(例如,启动其他进程)。

答案2

这意味着很多事情。

  1. 后台进程不会阻碍您的终端。它是“异步”运行的,因为我们不等待它完成。如果强行断开它仍然会死掉。
  2. 因此,响应不一定是“主动”而是“被动”,将输出重定向到文件以供以后检查是一种很好的形式。
  3. 除非考虑批处理解决方案(命令文件或响应文件或期望),否则交互式输入将会出现问题。
  4. 对于“长时间运行”的作业,您可能需要考虑作为服务启动。
  5. 如果后台有问题,另请参阅 tmux 和 screen 以获得替代方案。

答案3

当您在前台启动一个进程时,shell 将等待它完成(使用wait()系统调用系列之一),然后再读取下一个命令。当您在后台启动进程时,shell 不会等待它完成或更改状态;而是会等待它完成或更改状态。它立即读取并执行下一个命令。

请注意,无论您是否开始对于后台进程,您可以随意在后台和前台之间移动它(使用^Zbg,或使用fg)。在这方面,所有工作都是平等的。唯一的限制是在任何给定时间最多只能有一个前台作业,并且如果后台作业尝试使用 shell 的 tty,它们就会停止。

每当没有前台作业时,shell 就会读取下一个命令(从脚本文件或标准输入)并执行它。

相关内容