上篇文章:Linux基础4-进程5(程序地址空间详解)-优快云博客
本篇重点:fork,写实拷贝,进程退出
目录
一. fork创建子进程
1.1 fork用法
上篇文章提到,我们可以使用fork来创建一个子进程,详细用法如下:
//所需头文件
#include <unistd.h>
//函数原型
pid_t fork(void);
//返回值
//成功的情况下,在父进程返回子进程的pid,在子进程中返回0
//失败则会返回-1
//子进程不会执行父进程fork之后的代码
fork常用于:
1 一个父进程希望复制自己,让子进程执行不同的代码段(如父进程等待客户端请求,生成子进程来处理收到的请求)
2 一个进程想要执行一个不同的程序,如创建子进程进行exec(进程替换)
1.2 fork返回值有两个的理解
1 为什么父进程返回子进程的pid,而子进程返回0?
因为fork之后,各自执行自己的代码。各自获得自己的return值
2 为什么通过if,else可以让父子进程同时执行自己的代码?
如:上篇文章提到的代码
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int global_value = 100;
int main()
{
pid_t id = fork();
if(id < 0)
{
printf("fork error!\n");
return -1;
}
else if(id == 0) //子进程
{
int cnt = 0;
while(1)
{
printf("子进程,pid:%d ppid:%d | global_value:%d,&global_value: %p