为什么有些命令会“挂起”终端直到它们完成?

sqr*_*ram 23 command-line shell jobs

有时您从终端运行程序,例如lxpanel。终端不会让你回到提示,它会挂起。您可以按Ctrl+C返回提示,但这会杀死lxpanel. 但是,按Alt+ F2(弹出一个窗口以接收命令)并运行lxpanel正常。

为什么是这样?从终端运行命令与按Alt+时出现的“运行”窗口有什么不同F2

这里的 lxpanel 仅用作示例。我在多个程序中都经历过这种情况

Mic*_*zek 28

默认情况下,终端将在前台运行程序,因此在程序完成之前您不会回到 shell。这对于从 stdin 读取和/或写入 stdout 的程序很有用——您通常不希望它们中的许多同时运行。如果你想让一个程序在后台运行,你可以这样启动它:

$ lxpanel &
Run Code Online (Sandbox Code Playgroud)

或者如果它已经在运行,你可以用Ctrl+暂停它,Z然后运行bg将它移到后台。无论哪种方式,你都会得到一个新的 shell 提示,但程序仍在运行,它的输出将出现在终端中(所以它可能会在你打字的过程中突然出现)

一些程序(通常是守护进程)会在启动时分叉一个单独的进程,然后让主进程立即退出。这可以让程序继续运行而不会阻塞你的 shell

  • @lyrae:默认情况下,shell 在继续 shell 会话之前等待程序完成,它不会“挂起”,根据“挂起”的任何定义;alt+f2 不等待程序。shell 等待程序完成的原因是 shell 可以将用户在 shell 中输入的任何内容重定向到程序的标准输入和/或显示程序的标准输出。由于 alt+f2 主要用于启动 GUI 程序,因此 alt+f2 不提供使用标准输入/输出的可能性,因此不需要等待。 (2认同)

phu*_*ehe 8

当您在终端中启动程序时,终端将“挂起”直到您的程序停止。通过按Ctrl+c您正在关闭您的程序,从而返回到提示。您将在所有 GUI 应用程序中看到这一点,例如,尝试使用 Firefox。

当您使用其他方法(例如 Alt+F2 或单击菜单)时,您的程序会在后台启动,因此不会发生任何奇怪的事情(并且无论如何都没有命令提示符)。

如果您仍想从终端启动 GUI 应用程序,请&在命令末尾追加,如下所示

lxpanel &
Run Code Online (Sandbox Code Playgroud)

这告诉终端lxpanel在后台运行并立即给你另一个提示。