前六个都是标准C库的函数,最后一个是Linux的系统函数。最常用的是前两个。
execl
/*
#include <unistd.h>
int execl(const char *path, const char *arg, ...);
-参数:
-path:需要指定的执行文件的路径名称(推荐绝对路径)
- arg:是执行可执行文件所需要的参数列表
第一个参数一般没有什么作用,为了方便,一般写的是执行的程序的名称
自从第二个参数开始往后,就是程序执行所需要的的参数列表。
参数最后需要以NULL结束(哨兵)
返回值:
只有失败才有返回值 且设置errno
失败: -1
*/
#include <stdio.h>
#include <unistd.h>
int main(){
//创建一个子进程在子进程中执行exec函数族中的函数
pid_t pid = fork();
if(pid > 0){
printf("parent: pid : %d \n", getpid());
sleep(1);
}else if(pid == 0){
//execl("/bin/ps", "ps", "aux", NULL);
execl("hello", "hello", NULL);
printf("child, pid : %d \n", getpid());
}
for(int i=0; i<5; i++){
printf("i = %d pid = %d \n", i, getpid());
}
return 0;
}
exexlp
/*
#include <unistd.h>
int execlp(const char *file, const char *arg, ...);
-会到环境变量中查找可执行文件,如果找到就执行,找不到就执行不成功
int execv(const char *path, char *const argv[]);
argv是需要的参数的一个字符串数组
char *arg[] = {"ps", "aux", NULL};
execv("/bin/ps", argv);
I
*/
#include <stdio.h>
#include <unistd.h>
int main(){
pid_t pid = fork();
if(pid > 0){
printf("Parent: pid : %d \n", getpid());
}else{
//execlp("ps", "ps", "aux", NULL);
printf("Child: pid : %d \n", getpid());
}
for(int i=0; i<3; i++){
printf("i = %d, pid : %d \n", i, getpid());
}
}