一。多进程编程
1.函数学习
(1).创建进程
1.
函数名 fork
函数原型 pid_t fork(void)
函数功能 创建一个子进程
所属头文件 <unistd.h>
返回值 成功时:在父进程中返回子进程的pid
在子进程中返回是0
失败时:子进程返回的-1
参数说明 无参数
2.
函数名 vfork
函数原型 pid_t vfork(void)
函数功能 创建一个子进程并阻塞父进程
所属头文件 <sys/types.h> <unistd.h>
返回值 成功时:在父进程中返回子进程的pid
在子进程中返回是0
失败时:子进程返回的-1
参数说明 无参数
3.
#include <unistd.h>
#include <stdio.h>
void main(void)
{
pid_t pid;
int count = 0;
pid = fork();
count++;
printf("count = %d
",count);
exit(0);
}
思考得出什么结果?
4.fork 对比 vfork
(1) fork: 子进程用于独立的数据段,堆栈。
vfork:子进程与父进程共享数据段,堆栈。
(2) fork:父、子进程的执行次序不确定
vfork:子进程先运行、父进程后运行
(2).进程退出
exit(0);
(3).进程等待
函数名 wait
函数原型 pid_t wait(int *status)
函数功能 挂起调用它的进程,直到其子进程结束
所属头文件 <sys/types.h> <sys/wait.h>
返回值 成功时:返回终止的那个子进程的id
失败时:-1
参数说明 status:记录子进程的退出状态
(4).执行程序
函数名 execl
函数原型 int execl(const char*)
函数功能 运行可执行文件
所属头文件 <sys/types.h> <sys/wait.h>
返回值 成功时:不返回
失败时:才返回
参数说明 pathname:要运行的可执行文件的路径
arg:可执行文件运行需要的