欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C/C++教程之父子进程

程序员文章站 2022-03-23 20:00:43
C/C++教程之父子进程:进程和线程是服务器编程的常客,真正理解清楚并不是一件容易的事,C/C++作为难学易用的代表,在服务器编程上表现的尤为明显,用之前需要理解这个东西的体系架构...
C/C++教程之父子进程:进程和线程是服务器编程的常客,真正理解清楚并不是一件容易的事,C/C++作为难学易用的代表,在服务器编程上表现的尤为明显,用之前需要理解这个东西的体系架构是怎样的,否则稍不注意就是一场灾难,然后末日来临。

一、什么是进程

直观一点可以理解为一个执行起来的程序

所有进程属性采用结构体维护->树状结构体

ps 查看所有进程常见属性

top 查看系统进程执行状况

pstree 树形显示进程

kill 向进程发送信号

kill -s 信号 进程id

kill -l 显示进程能接收的所有信号

二、创建进程

进程有关的创建函数

int system(const char* filename);

建立独立进程,拥有独立的代码空间,独立的内存空间

等待新的进程执行完毕,system才返回

popen

exec系列函数

fork

pid_t fork();

创建进程

 

三、理解进程

1.父子进程的关系

独立的两个进程

pstree上面互为父子关系的两个进程节点

2.问题:

父进程先结束导致

-> 子进程就直接依托根进程init,成为孤儿进程,无任何危害

子进程先结束导致

-> 子进程会成为僵尸进程,不占用内存,不占用CPU,但在进程树占用一个节点

造成进程名额的资源浪费,必须处理僵尸进程

3.僵尸进程使用wait回收

4.父进程如何知道子进程退出

子进程结束通常会向父进程发送一个信号SIGCHLD(17)

5.父进程处理子进程退出信号

signal(int sig,void (*fun) (int));

向系统注册:只要sig信号发生,系统停止进程,并调用注册函数fun

当函数执行完毕,继续原来进程

6.父子进程的资源访问

6.1 内存资源

子进程克隆整个内存区域,但内存区域指向不同的物理空间

但内存独立,不能相互访问

6.2 文件资源

两个进程之间,文件描述符指向的是同一个文件

7. 多进程与文件锁

四、进程控制(后续更新...)