bg和fg发送什么信号?

Man*_*dan 3 process signals jobs background-process

我知道ctrl+z将进程从前台更改为后台(如暂停SIGTSTP。我可以通过fgbg根据需要重新运行后台挂起的进程。

问题

  • bg发出什么信号fg

不确定两者发送的内容是否相同或不同。

我确实意识到没有既非man fg也非man bg。好吧,没有关于通过fg --help和 的信号的信息bg --help

小智 6

bg并且fg不发送信号。它们是改变 shell 行为方式的内置函数。

其工作原理是用户的输入必须到达其预期目的地。当您运行时bg (job),您告诉 shell 您不再希望该进程从控制台读取或写入,只需在其中运行即可。

因此,从那时起,当您写入控制台时,shell会发送SIGTTINSIGTTOU信号来分别告诉该进程不允许读取或写入。

要回答您的后续问题:当您有一个在前台运行的进程想要移动到后台时,您可以点击将信号Ctrl + Z发送SIGTSTP到正在运行的作业(这是交互式停止信号)。然后运行“bg (job #)”,它告诉 shell“我希望这个作业移到后台”。

然后,shell 会将该作业标记为内存中的后台作业,并相应地对待它,SIGCONT如果发现它当前已停止,则发送该作业。该bg命令本身并不发送信号,但 shell 可能会发送信号SIGCONT作为对 的反应bg

  • 在该功能所在的 csh 中,SIGCONT 作为“fg”/“bg”内置代码的一部分发送。在 zsh 中也是如此。如果它是由 shell(运行内置函数)作为这些内置函数调用的一部分完成的,那么说它是由这些内置函数完成的仍然是正确的。 (2认同)