\ue50a2015-06-26　15:53:53　\ue50b\ue50a我来说两句　\ue50b《C　C　技术丛书:高级C　C　编译技术》从多个角度全面、系统地讲解多任务操作系统中编译、链接、装载与库的内幕和技术细节,为深入理解和掌握系统底层技术提供翔实参考和实践指南。和纯粹讲解理论与技术细节的书立即去当当网订购用户通常都会使用shell执行程序,shell能够通过监视用户键盘和鼠标的操作来执行相应的动作。Linux中可以运行多种不同的shell程序,其中使用最为广泛的要数sh、bash和tcsh。　当用户输入命令名并按回车键时,shell首先会将输入的命令名与其自身内置的命令进行比对。如果程序名不是shell所支持的命令,那么shell就会尝试定位文件名与命令字符串完全匹配的二进制文件。如果用户只输入了一个程序名(不包括可执行二进制文件的完整路径),则shell会尝试定位由PATH环境变量所指定的目录中的可执行文件。当得到可执行二进制文件的路径后,shell就会启动加载和执行二进制文件的过程。　shell先会通过派生与自身相同的子进程来创建自己的副本。通过复制shell当前的内存映射来创建新进程内存映射的做法似乎有些奇怪,这么做的原因很可能是新进程的内存映射与shell的内存映射完全不同。采用这种奇怪策略的原因在于这种方法能够有效地将所有shell的环境变量传递给新进程。在新进程的内存映射创建好后,绝大多数内存区域的原始数据都会被抹掉或填零(除了包含继承环境变量的那部分区域),同时被新进程的内存映射所覆盖,为执行阶段做准备。图3-1说明了这个概念。　从此刻起,shell的执行可能会分为两种不同的情况。在默认的情况下,shell会等待它派生的克隆进程执行完命令(即启动的程序执行结束)。而在另一种情况下,如果用户在程序名后输入了一个与符号(&),那么子进程将会在后台执行,与此同时shell还会继续监视用户接下来输入的命令。如果用户不在可执行文件名后输入与符号,同样也可以实现后台运行。