1、进程创建
fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,一个进程调用fork()函数后,就会创建一个新的进程,系统先给新的进程分配资源,然后把原来的进程的所有值都复制到新的新进程中,包括数据空间、堆、栈和进程描述符等,只有少数值与原来的进程的值不同(比如原进程的定时器,操作信号)。相当于克隆了一个自己,子进程从fork函数的返回值处开始执行。
创建新进程成功后,系统中出现两个基本完全相同的进程,这两个进程执行没有固定的先后顺序,哪个进程先执行要看系统的进程调度策略。
2、进程退出
3、获取进程pid
4、进程等待
实例:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
int main()
{
int status=0;
pid_t pid=fork();//创建子进程
if(pid < -1)//创建失败
{
perror("fork");
return -1;
}
if(pid == 0)//子进程
{
printf("我是子进程,我的pid是:%d\n",getpid());
exit(status);//子进程退出值
}
if(pid > 1)//父进程
{
// sleep(3);
wait(&status);//阻塞父进程等待子进程推出
printf("子进程退出码:%d\n",WEXITSTATUS(status));
printf("我是父进程,我的pid是:%d\n",getpid());
return getpid();
}
return 0;
}
运行结果: