我使用命令运行 Firefox xinit /path/to/firefox/binary
,它会打开一个显示窗口,其中正在运行 Firefox。
然后我按Ctrl+ Alt+F1返回控制台,然后按Ctrl+z将 Firefox 暂停到后台。
然后,我按++Ctrl返回Firefox。我预计 Firefox 会被冻结或无响应,但我仍然可以毫无问题地使用 Firefox。我的期望基于我将其他应用程序发送到后台时的经验,例如.当我发送到后台时,下载过程停止。AltF7wget
wget
为什么会出现这种情况?
答案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
。