shell英文翻译为外壳,壳的意思;而在linux操作系统中,我们将它作为操作系统的外壳来理解。对shell工作原理的感性认识,shell在运行指令时,看似运行指令,实际是创建了shell的子进程来代替父进程shell来运行指令,此时子进程运行指令并不是shell的指令,而是一个全新的指令。这里就运用了linux进程控制主题下的进程程序替换。
子进程程序替换的步骤 :1.创建子进程;2.将硬盘上的新程序加载到物理内存中去;3.让子进程通过页表映射到物理内存中新代码的位置,从此子进程在代码和数据上与父进程没有任何关系(除血缘关系)。
linux采用exec进程程序替换家族函数来进行程序的替换,共有六个函数
函数的返回值:
这些函数如果调.用成功则加载新的程序从启动代码开始执行,不再返回,如果调用出错则返回-1, 所以exec函数只有出错的返回值.而没有成功的返回值。
以上六个函数各有不同,主要在后缀字码l与v、p、e的含义不同函数的参数形式也不相同
execl与execv 两者不同在于第二个参数,第二个参数代表输入命令行的参数,execl函数以l结尾,第二个参数为可变列 表的形式(...), execv函数以v结尾,第二个参数用指针数组来代替,数组元素指向一个个字符串。但参数都是以 NULL 结尾。execlp与execvp都是以p做为后缀 函数后缀不带p,第一个参数必须是程序的相对路径和绝对路径,‘.’表示当前路径,‘/’表示根目录;函数后缀 带p,则第一个参数可以是程序名,也可以加/表示路径。execle与execve都是以e字母结尾 函数后缀带有e,则第三个参数表示环境变量,可以重新传一个新的环境变量给函数;不带后缀e,则函数 exec使用当前的环境变量运行程序。只有函数execve是真正系统调用的函数,其余五个函数最终调用的都是execve函数。新闻热点
疑难解答