fork函数创建子进程后,子进程往往要调用一种exec函数以执行另一个程序。
exec函数负责读取可执行行文件并将其载入地址空间开始运行。
我们有六种不同的exec函数可供使用,它们常常被统称为exec函数。
下面这几个是exec函数的库函数,它们都依存于execve系统调用函数:
execve系统调用函数:
返回值:成功不返回,出错返回-1
file参数:其中filename等于path,取路径名为参数。file取文件名作为参数(函数会自行去PATH环境变量里面找路径)。
arg参数:其中以arg为名的都要求将新程序的每个命令行参数都说明为一个单独的参数,最后以空指针结尾。
以argv[]为名的则应先构造一个指向各参数的指针数组,然后将该数组地址作为这三个函数的参数。
envp参数:允许构造一个环境变量的数组。
使用演示:
因为六个函数使用起来类似,我只演示了execve函数,使用了路径名,自己构造的argv和默认的envp环境变量。
运行结果:
可以看到ps -f的pid就是main函数的pid,说明ps -f就是main函数替换后的命令。