程序存储在磁盘上,当系统需要执行程序时,将其加载到内存中形成进程。加载程序是一个常用的操作。
1.执行一个新程序
linux环境下使用exec函数执行一个新程序。该函数在文件系统中搜索指定路径的文件,并将该文件内容复制到调用exec函数的地址空间,取代原进程的内容。
因此,exec函数不是创建一个新进程,虽然进程的内容改变了,但是进程ID没变,仍然是同一个进程。
exec的函数原型如下:
int execl(const char *pathname,const char *arg0,..);
int execle
int execv
int execve
int execlp
int execvp
linux系统提供了6个exec函数的泛型,l代表list,说明执行程序的命令行参数以列表的形式提供,以NULL结尾。参数个数没有限制。
v表示vector,说明命令行参数要以二维数组的形式提供给新程序。这个数组的每一行是一个命令行参数。
e表示传递给新程序的环境变量列表,这个列表是一个二维数组,每一行是一个环境变量。
p代表第一个参数不是完整的路径名,而是一个程序名。
2.执行解释器文件。
执行解释器文件的方法:
#!解释器程序的路径 给程序要传递的参数
3.在程序中执行shell命令
linux环境下使用system()调用shell命令
#include
int system(const char *cmdstring);
cmdstring是需要执行的shell命令,system函数是一个库函数,里面封装了fork,exec,waitpd三个系统调用。
(1)如果fork函数和waitpid函数执行失败,system函数返回-1
(2)如果exec函数执行失败,system函数返回如同shell调用exit(127)一样,表示指定文件不可执行
(3)如果三个函数都执行成功,system函数返回执行程序的终止状态,其值和echo $?的值是一样的。
(4)如果参数cmdstring所指向的命令字符为NULL,system函数返回1.这可以用来测试当前系统是否支持system函数。
阅读(1587) | 评论(0) | 转发(2) |