后台挂起的应用程序(通过 ctrl+z)是否应该继续运行还是应该停止运行?

后台挂起的应用程序(通过 ctrl+z)是否应该继续运行还是应该停止运行?

我使用命令运行 Firefox xinit /path/to/firefox/binary,它会打开一个显示窗口,其中正在运行 Firefox。

然后我按Ctrl+ Alt+F1返回控制台,然后按Ctrl+z将 Firefox 暂停到后台。

然后,我按++Ctrl返回Firefox。我预计 Firefox 会被冻结或无响应,但我仍然可以毫无问题地使用 Firefox。我的期望基于我将其他应用程序发送到后台时的经验,例如.当我发送到后台时,下载过程停止。AltF7wgetwget

为什么会出现这种情况?

答案1

如果您从终端运行 Firefox,它会将自身置于后台并与您的终端分离。因此按Ctrl+Z并不是真正暂停 Firefox,它可能会暂停xinit

wget并且大多数命令行程序没有这种分离行为。基于 GUI 的程序(例如gedit启动 Firefox 和分离)大多是这样的。


我查看是否有一些选项可以防止这种情况发生。-foreground似乎是一个可能的选项名称,但这只是将 Firefox 窗口推到前台。

答案2

Ctrl+Z确实会暂停应用程序,就像这样,它会停止运行,直到使用 SIGCONT(可能通过shell 中的fg或命令发送)恢复为止。bg但…

你是在跑xinit,不是firefox。按Ctrl+Z会将 STOP 信号发送到在前台运行的应用程序,而不是发送到它可能已运行的其他应用程序。因此,您只是暂停了xinit自身,这不会影响 X11 会话。

更准确地说,按Ctrl+Z会向前台发送 STOP 信号进程组。这可能涉及多个进程,但进程组的目的是,它在道德上仍然是用于信号发送目的的单个单元。

(这同样适用于Ctrl+C和 SIGINT、Ctrl+\和 SIGQUIT。另一方面,当终端消失时,SIGHUP 仅发送到单个进程:会话领导者,通常是 shell;shell 反过来将 SIGHUP 发送到它们启动的作业.)

xinit在自己的进程组中运行 X 服务器和客户端,这样您就可以挂起或终止它,而无需终止整个会话。当你向它发送一个可捕获的信号时,它会杀死 X 服务器,这反过来会导致大多数 X 应用程序退出 - 因此按Ctrl+C确实会关闭 GUI 会话,但不是间接的,不是因为每个客户端和服务器都收到了 SIGINT,因为Ctrl+ C.另一方面,xinit不会对Ctrl+执行任何特定操作Z,因此只会挂起xinit并保留会话,当您想在运行的终端中执行其他操作时,这非常有用xinit

相关内容