为什么有些程序会立即返回 shell 而有些程序直到执行完成才返回?

Asw*_*P J 14 shell process background-process

我从现代操作系统一书中读到,当一个命令运行时,shell 创建一个子进程,等待它直到子进程完成执行,然后等待来自用户的另一个命令。对于像gedit. 终端在我关闭之前不会接受命令gedit。但是,当我打开atom代码编辑器时,shell 立即返回,即使编辑器正在运行,也准备好接受下一个命令。关闭终端不会关闭原子。这是否意味着编辑器不是作为子进程打开的?使这成为可能的潜在机制是什么?

跑步ps au | grep atom给予

<username>      8042  0.0  0.0  15944  2264 pts/1    S+   00:55   0:00 grep --color=auto atom
Run Code Online (Sandbox Code Playgroud)

Tho*_*key 19

该问题询问两种类型的程序:

  1. 在 shell 中与用户交互的程序,以及
  2. 在 shell 中与用户交互的程序。

在第一种情况下,在 shell 中与用户交互的程序被设计为在将控制权返回给 shell 之前运行完成。没有做任何特别的事情。

第二种情况更复杂。通常,程序会fork(在内存中复制自己的副本),并安排删除它与 shell 的控制终端的关联,并可能执行另一个程序——它独立于原始 shell 运行。您可能会看到来自第二个程序的消息,但它通常不会以其他方式与您交互。根据它的使用方式,您可能有

  • 一个守护程序(服务器)处理,或
  • 该程序可能会在新窗口中运行。图形编辑器做后者。

进一步阅读: