fork创建进程
pid_t fork(void);
功能:创建一个子进程
返回值:
成功则返回两次,子进程返回0,父进程返回子进程ID。
失败则返回一次 -1
vfork创建进程
pid_t vfork(void);
功能:创建子进程
返回值:
失败返回 -1
成功返回两次,子进程返回0,父进程返回子进程ID
区别:
vfork创建的子进程不会复制父进程的代码段资源,而是通过exec系列函数直接加载一个可执行文件启动子进程
子进程创建成功前,子进程暂时借用父进程的相关资源来加载子进程,而此时的父进程是阻塞状态,只有子进程创建成功后,父进程才继续运行。
通过vfork创建的子进程,不会继承父进程的信号处理方式
int execl(const char *path, const char *arg, ...);
path:可执行文件的路径
arg:命令行参数,至少一个,且以NULL结尾
int execlp(const char *file, const char *arg, ...);
file:可执行文件名,该文件必须存储在path环境变量的路径下
arg:命令行参数,至少一个,且以NULL结尾
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
argv:存储命令行参数的字符串数组,最后一个必须是NULL
vfork配合execvp、wait使用例子:传送地址