标签:分支 输出 execve pat 系统 return 分配 ref printf
fork创建子进程执行的是和父进程相同的程序(也有可能是某个分支),通常fork出的子进程是为了完成父进程所分配的任务,所以子进程通常会调用一种exec函数(六种中的任何一种)来执行另一个任务。当进程调用exec函数时,当前用户空间的代码和数据会被新程序所替换,该进程就会从新程序的启动历程开始执行。在这个过程中没有创建新进程,所以调用exec并没有改变进程的id。
1. 执行指定目录下的程序
int execl(const char *path, const char *arg, ...);
分析:
2. execv函数原型:
int execv(const char *path, char *const argv[]);
分析:
3. 执行PATH环境变量能够搜索到的程序
int execlp(const char *file, const char *arg, ...);
分析:
注意:如果file中包含/,则将其视为路径名,否者就按PATH环境变量,在它指定的各目录中搜可执行文件
4. execvp函数原型:
int execle(const char *path, const char *arg, ..., char *const envp[]);
5. 执行指定路径, 指定环境变量下的程序
int execle(const char *path, const char *arg, ..., char *const envp[]);
分析:
6. execve函数原型:
int execve(const char *path, char *const argv[], char *const envp[]);
二、代码清单
1. 测试代码:
1 #include <unistd.h> 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 int main() 6 { 7 for(int i = 0; i < 8; ++i) 8 printf(" parent i = %d\n", i); 9 pid_t pid = fork(); 10 if(pid == 0) 11 { 12 execlp("ps", "ps", "aux", NULL); 13 perror("execlp"); 14 exit(1); 15 } 16 for(int i = 0; i < 3; ++i) 17 printf("----------- i = %d\n", i); 18 return 0; 19 }
输出结果:
标签:分支 输出 execve pat 系统 return 分配 ref printf
原文地址:https://www.cnblogs.com/sunbines/p/10269190.html