cor*_*lix 4 shell shell-builtin thread
我知道外部命令是通过创建一个单独的进程在 shell 中运行的,但是在 shell 中运行内置命令时究竟会发生什么?
它们是作为函数执行的,还是 shell 创建一个新线程来执行它们?
对于您的具体示例,有一个 function cd_builtin
,它在 builtins/cd.def (在 bash 源代码中)中定义。它通常cd
通过调用该函数来完成。但是如果你在管道中使用它,它可能会先分叉——例如,在子cd / | echo
进程中分叉和调用cd_builtin
。您还可以通过目录实际上并没有改变来注意到这一点:
anthony@Zia:~$ cd /tmp/
anthony@Zia:/tmp$ cd / | echo -n
anthony@Zia:/tmp$ cd /
anthony@Zia:/$
Run Code Online (Sandbox Code Playgroud)
请注意目录仅在我不从cd
.
根据定义,内置命令在主可执行文件中执行,而不是在不同的程序中执行。
所有 shell 命令都是同步的:shell 在执行下一个命令之前等待命令完成。运行外部命令时,shell 必须创建一个单独的进程来运行该命令,并等待它退出。运行内置命令时,无需创建新的执行线程:命令在主线程内执行。
我不认为任何常见的外壳在其内部设计中使用线程。Shell 功能与传统的每进程单线程 Unix 模型紧密相关,在 Shell 设计中没有线程可以解决的问题。
很有可能每个内置函数都是由 shell 源代码中某个级别的函数实现的。
归档时间: |
|
查看次数: |
3023 次 |
最近记录: |