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

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

我已经读过现代操作系统书上说,当运行命令时,shell 会创建一个子进程,等待子进程完成执行,然后等待用户发出的另一个命令。对于许多像gedit.在我关闭之前,终端不会接受命令gedit。然而当我打开原子当编辑器运行时,shell 立即返回,准备好接受下一个命令,即使编辑器正在运行。关闭终端才不是接近的原子。这是否意味着编辑器不作为子进程打开?使这成为可能的根本机制是什么?

跑步ps au | grep atom给予

<username>      8042  0.0  0.0  15944  2264 pts/1    S+   00:55   0:00 grep --color=auto atom

答案1

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

  1. 在 shell 中与用户交互的程序,以及
  2. 执行以下操作的程序不是在 shell 中与用户交互。

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

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

  • A守护进程(服务器)进程,或
  • 该程序可能会在新窗口中运行。图形编辑器则执行后者。

进一步阅读:

相关内容