一.进程
1.什么是进程
进程:(进行中的程序)--正在运行的程序 (动态的) ---内存
程序的一次执行过程,是程序的一个实例。
2.进程和程序
程序 -- a.out (可执行程序) ---静态的 ,一个程序可以对应多个进程。
程序 加载 到内存 运行起来 成为了 进程。
程序 --- 静态---硬盘
进程--- 动态---内存
3.为什么需要进程
为了描述和管理程序运行时动态过程,操作系统为了管理程序的动态运行过程。
PCB---进程控制块
4.进程的组成
程序的构成:程序 = 代码 + 数据
栈
堆
静态区
字符串常量区
代码段
进程 = PCB + 进程实体(栈,堆,静态区...)
5.查询进程相关命令
1)ps aux | grep //进程名
PID, //进程标识符
PPID, //父进程ID号 parent
当前工作路径 //chdir
2)查看进程相关信息
1.就绪态、运行态 R
2.睡眠态、等待态
可唤醒等待态 S
不可唤醒等待态 D
3.停止态 T
4.僵尸态 Z
5.结束态
3)top
根据CPU占用率查看进程相关信息
4)kill和killall发送一个信号
kill PID
发送信号+PID对应的进程,默认接收者关闭
kill -9 进程PID号
kill -l //查看信号列表
killall -9 进程名
发送信号 进程名对应的所有进程
killall a.out //通过 进程名 发信号
kill 信号编号 进程ID
二.fork函数(进程的创建)
fork();
pid_t fork();
一次调用,会返回两次。
子进程先运行和是父进程先进程,顺序不确定。
变量不共享。
子进程复制父进程的0到3g空间和父进程内核中的PCB,但id号不同。
功能:通过该函数可以从当前进程中克隆一个同名新进程。
克隆的进程称为子进程,原有的进程称为 父进程。
子进程是父进程的完全拷贝。
子进程的执行过程是从fork函数之后执行。
子进程与父进程具有相同的代码逻辑。
返回值:int 类型的数字。
在父进程中:成功 返回值是子进程的pid号 >0
失败 返回-1;
在子进程中:成功 返回值 0
失败 无
三.注意
1.结束掉子进程,查看当前系统中父子进程的状态 (top/ps/pstree) // 子进程结束,父进程没有收尸 ---僵尸态
2.结束掉父进程,查看当前系统中父子进程的状态 //孤儿进程 --- 子进程还在,父进程不在。(init收养子进程)
//此时,子进程是一个后台进程