1.进程创建:
创建一个pcb,复制父进程中的信息
pid_t fork(),相当于clone,但是子进程与父进程共用同一个虚拟地址空间,使用相同的页表
pid_t vfork(),是一个阻塞函数,父进程创建后,这个vfork函数在父进程中并不会立即返回,会阻塞直到子进程exit或程序替换之后才会返回
pid_t pid = fork();
2.进程等待:
等待一个子进程的退出,获取退出子进程的返回值,并且释放子进程资源,防止出现僵尸进程
#include <stdio.h>
2 #include <unistd.h>
3 #include <stdlib.h>
4 #include <sys/wait.h>
5
6 int main()
7 {
8 pid_t pid = fork();
9 if(pid < 0)
10 {
11 perror("fork error");
12 exit(-1);
13 }
14 else if(pid == 0)
15 {
16 sleep(5);
17 exit(0);
18 }
19 int ret = waitpid(-1,NULL,0);
20 if(ret < 0)
21 {
22 perror("waitpid error");
23 }
24 else if(ret == 0)
25 {
26 printf("have no child exit\n");
27 }
28 else
29
30
31
32 return 0;
33 }
3.进程终止:
退出一个进程
方法:
1.main函数中的return;
2.exit(int status)–库函数;
3._exit(int status) --系统调用接口
exit(0);