fork()总结:
子进程继承自父进程属性:
1.用户ID、进程组ID、会话ID、终端、umask。
2.cwd、根目录、信号屏蔽和安排。
3.共享代码段,资源限制。
区别:
1.fork返回值、进程ID、父进程ID。
2.子进程的时间值均被置0
3.文件锁不被继承
4.子进程中末处理的信号集设置为空集。
fork常见的两种用法:
1.一个父进程希望复制自己,使父子执行不同的代码段。网络中经常用来处理服务请求
2.一个进程要执行一个不同的程序,即子进程执行exec
还有一个fork函数,只为了之后调用exec,pcb复制内容少一些。
1 #include <unistd.h>
2 #include <stdio.h>
3
4 int main(int argc, char **argv)
5 {
6 pid_t pid_c;
7
8 pid_c = fork();
9
10 if(pid_c < 0)
11 {
12 perror("fork process is error\n");
13 return -1;
14 }
15 if(pid_c == 0)
16 {
17 printf("i am child process\n");
18 printf("child pid:%d\n", getpid());//获取本进程ID
19 printf("child ppid:%d\n", getppid());//获取父进程的ID
20 }else if(pid_c > 0)
21 {
22 waitpid(pid_c);
23 printf("i am parent process\n");
24 printf("parent pid:%d\n", getpid());//获取本进程的ID
25 }
26 return 0;
27 }
~