一、介绍
fork函数是系统创建进程函数、而当我们需要子进程去执行另一个程序,这时我们可以使用execl函数将子进程替换成新的进程映像,使子进程调用新的程序。
二、execl的函数
1. 函数原型
int execl(const char *path, const char *arg, ...);
2.参数:
path: 表示你要启动程序的名称包括路径名。
arg: 表示启动程序所带的参数,一般第一个参数为要执行命令名,不是带路径且arg必须以NULL结束。
三、例子
进程调用execl函数替换进程映像:
1 #include <unistd.h> 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 int main() 6 { 7 pid_t pid; //进程标识符 8 pid = fork(); //创建一个新的进程 9 if(pid<0) 10 { 11 printf("创建进程失败!\n"); 12 exit(1); 13 } 14 /* 如果pid为0则表示当前执行的是子进程 */ 15 else if(pid==0) 16 { 17 printf("这是子进程,进程标识符是%d\n",getpid()); 18 execl("/mnt/hgfs/share/study/exec/son_process/exe","",NULL); 19 } 20 else 21 /* 否则为父进程 */ 22 { 23 printf("这是父进程,进程标识符是%d\n",getpid()); 24 } 25 printf("process end\n"); 26 sleep(1); 27 return 0; 28 }
替换进程映像后程序执行代码:
1 #include <unistd.h> 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 int main() 6 { 7 printf("替换进程映像成功\n"); 8 return 0; 9 }
结果: