vfork和fork差不多,区别是
1. vfork保证子进程先运行
2.. vfork和fork一样都创建一个子进程,但是它并不将父进程的地址空间完全复制到子进程中,不会复制页表
execl函数 int execl(const char *path, const char *arg, ...);
execl()用来执行参数path字符串所代表的文件路径,接下来的参数代表执行该文件的参数argv[0],argv[1]...
最后一个参数必须是空指针NULL作为结束。
返回值:成功则不返回,执行失败则返回-1,失败原因在errno中。
#include <unistd.h>
#include <stdio.h>#include <stdlib.h>
int main(int argc,char **argv)
{
if(argc<2)
{
perror("you haven't input the filename!\n");
exit(EXIT_FAILURE);
}
pid_t pid;
pid=vfork();
if(pid<0)
{
printf("Fork Error!\n");
exit(1);
}
else if(pid==0)
{
printf("I am the child.\n");
if(execl("./ceshi","ceshi",argv[1],NULL)<0)
perror("execl error!\n");
}
else{
printf("I am the father\n");
return 0;
}
}