如何分叉一个当 shell 退出时不会终止的进程?讨论“双重分叉”:
双倍的
fork()
- :(emacs &)
括号内的命令
(
)
在单独的 shell 进程中运行。
您能解释一下为什么与简单的相比,这会有什么不同吗emacs &
?首先,在子 shell 环境中运行它有什么意义?
答案1
你能解释一下为什么这与简单的相比会有什么区别吗
emacs &
?
(emacs &)
运行一个子 shell,然后emacs &
在其内部运行,这意味着它的stdin
、stdout
和stderr
被绑定到子 shell。它变为双分叉,并将在初始 shell((emacs &)
运行的位置)消亡后继续存在。仅运行emacs &
将使stdin
、stdout
和stderr
绑定到初始 shell。
emacs
这实际上是一个坏例子,因为 GUI 版本不会在意它丢失了stdin
、stdout
和stderr
。您可以尝试使用(ls -R / &); exit
,然后使用 grep 查看它是否仍在运行。 欢迎编辑以提供比 更好的示例ls
。
首先,在子 shell 环境中运行它有什么意义呢?
将其与初始壳完全分离(见上文)。