Linux命令运行的基本过程

原文地址:https://blog.csdn.net/hjx5200/article/details/22487683


在CLUI(Command Line User Interface,与GUI对应)模式下,用户是通过shell与系统交互的。什么是shell?(提示一提示二)上述两个材料得知shell也是一个程序,它与其他程序最大的不同是:它的目的是执行其他程序,而不是从事计算,绘图,存储等等具体事务。分析一下shell的工作原理有助于破除shell的神秘感,更好的掌握shell命令。下图是shell的基本流程,现在流行的bash,csh,zsh等要比这复杂得多,考虑了很多细节。


上图展示了ls命令的执行过程,下面进行简单分析:

  • 1、shell不断询问是否有键盘输入,用户以enter结束键盘输入后,shell程序以空格为分隔符,得到"ls","-l","*.c",三个字符串。
  • 2、shell发现第三个字符串包含"*"通配符,就会在当前路径(或指定路径)下搜索满足这个通配符的文件。有bar.c和foo.c两个文件,然后展开成{"ls","-l","bar.c","foo.c"}四个字符串,并保存在argv这个二维字符数组中,并赋值argc为4。
  • 3、shell然后搜索PATH这个全局变量保存的路径,寻找一个叫"ls"的命令。如果存在,则fork()一个子进程,调用exec()加载运行ls命令。ls的main(int argc, string ** argv)函数的参数就是从shell那里得来的。若不存在就会提示用户"command not found"。
  • 4、ls程序执行后,会分析argc和argv,"-l"表示这是一个选项开关,表明用户想得到文件的详细信息,并把这个开关量保存,以便最后输出的时候选择信息的格式。
  • 5、ls执行完既定的步骤后,退出并返回退出码,若成功则返回0,否则根据错误的不同返回不同的非零数字。
  • 6、shell在得到成功退出码后,继续等待用户输入。

如此不断的循环。

本文参考了《王垠:Unix的缺陷》


猜你喜欢

转载自blog.csdn.net/Michael_Zheng_Tech/article/details/79860077