【问题标题】:Does Every Shell command in linux calls a system call at the back endLinux中的每个Shell命令是否在后端调用系统调用
【发布时间】:2013-01-06 00:18:57
【问题描述】:

我被要求找到一个不进行任何系统调用的 shell 命令。我搜索了很多,最后在这里询问是否有任何命令在 linux shell 或 unix 中不会在后端调用系统调用。

谢谢。

【问题讨论】:

    标签: linux shell unix operating-system system-calls


    【解决方案1】:

    是和否

    部分...

    有许多 shell 内置函数可以处理 shell 宏处理器编程语言的控制流或定义。

    只有少数内置函数本质上需要进行任何系统调用;一般来说,它们只是改变 shell 内存映像中的状态。

    部分...

    实际上,您甚至不能只在 shell 中键入 Enter 而不运行许多系统调用。 shell 可能会等待(2)来查看是否有任何子进程终止,它可能会检查时间,它通常会打印一个提示......当然它会读取下一个命令。

    【讨论】:

      【解决方案2】:

      想想shell是什么,它是如何运行命令的。

      shell 是一个解释器。粗略地说,只有一个解释器循环

      do {
         get_next_command();
         switch(next_command){
         cmd_alias: ...
         cmd_break: ...
           ...
         }
      } while (true);
      

      现在想想,哪个命令只是更新了shell进程的内部结构,哪个命令需要调用操作系统来执行它的功能。

      【讨论】:

      • 感谢您的意见,但您能否更具体地了解更新内部结构的任何命令。
      • 您也可以strace shell 本身(或每个非内置命令)
      • 你可以用一个shell来研究源代码,bash或者sash这样更简单的shell
      猜你喜欢
      • 1970-01-01
      • 2013-04-04
      • 2021-01-22
      • 2014-10-10
      • 2015-05-04
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      • 2021-04-27
      相关资源
      最近更新 更多