Linux环境C 进程及进程间通信

进程基本概念:

1、进程与程序

​ 程序就是储存在磁盘上的可执行文件,程序被加载到内存中开始运行进程。

​ 一个程序被多次加载时就生成了多个进程

​ 进程就是处于活动状态的计算机程序

2、进程的分类

​ 进程一般分为三种类型:交互进程、批处理进程、守护进程

​ 守护进程一般处于活跃状态,运行在后台,由系统在开机时通过启动脚本来自动创建

3、 查看进程

​ 简单方式 ps 显示当前用户有控制终端的进程信息

​ 列表方式 ps auxw 显示所有进程详细信息

​ a 所有用户的有控制终端的进程

​ x 无控制终端的进程

​ u 显示进程的详细信息

​ w 以更大的列宽显示

USER 进程的属主

PID 进程的编号

%CPU CPU利用率

%MEM 内核使用率

VSZ 虚拟内存使用字节数

RSS 物理内存使用字节数

TYY 终端设备号 ? 表示无终端控制设备

STAT 进程的状态

​ O 就绪,等待被调度

​ R 运行,Linux系统没有0,就绪也用R表示

​ S 可被唤醒的睡眠,例如系统中断、获得资源、收到信号都可以唤醒它进入运行态

​ D 不可唤醒的睡眠,只能被系统唤醒

​ T 暂停态 收到SIGSTOP信号进入暂停态,收到SIGCONT信号转入运行态

​ W 等待内存分页 (2.6内核后被废弃了)

​ Z 僵尸状态

​ X 死亡状态

​ < 高优先级

​ N 低优先级

​ l 多线程的进程

​ s 进程的领导者

​ L 有内存被锁进内存

​ + 处于后台的进程组

START 进程启动的时间

TIME

COMMAND 启动进程的命令

4、父进程、子进程、孤儿进程与僵尸进程

​ 一个进程可以被另一个进程创建,创建者叫父进程,被创建者叫做子进程,子进程被父进程启动后会在操作系统的调用下同时运行

​ 当子进程先于父进程结束时,子进程会向父进程发送SIGCHLD信号,此时父进程应该去回收子进程的相关资源,如果没有回收,那么子进程就会变成僵尸进程

​ 僵尸进程:该进程已经死亡,但是它的父进程没有立即回收它的相关资源,该进程就进入了僵尸状态

​ 孤儿进程:父进程先于子进程结束,子进程就变成了孤儿进程,此时孤儿进程会被孤儿院(init守护进程)领养,init就是该孤儿进程的父进程

5、进程标识符

​ 每个进程都有一个非负整数表示的唯一表示,即是它的进程ID/PID

​ 进程ID在任何时候都是唯一的,但可以重用,进程一旦结束后,它的PID会被系统 回收,过一段时间才可以重新分配给其他新创建的进程使用(延迟重用)

pid_t getpid(void);
功能:获取当前进程的进程ID

pid_t getppid(void);
功能:获取当前进程的父进程的ID

init的进程ID永远是1

创建进程:

​ int system(const char *command);

​ 功能:执行一个可执行文件,这样就创建了一个子进程

​ 返回值:子进程结束后才返回

​ 该函数的实现调用了fork和waitpid函数,其实相当于创建了一个子进程,该子进程` 加载了可执行文件command

​ pid_t fork(void);

​ 功能:创建子进程

​ 返回值:一次调用两次返回,子进程返回0,父进程返回子进程的ID,当进程的数量 超过系统限制就会创建进程失败,返回-1

​ 通过fork创建的子进程会拷贝父进程(数据段、bss段、堆、栈、IO缓冲区)等数据 区,与父进程共享代码段,子进程会继承父进程的信息处理方式

​ 该函数调用后,父子进程各自独立运行,谁先返回并不确定,但是可以通过睡眠确 定哪个进程先执行

​ for(;

上一篇:Linux编程学习--进程间通讯(二)System V IPC


下一篇:Linux信号量(1)-SYSTEM V