进程相关接口函数
1、进程
程序:静态的,有序指令的集合
进程:是系统分配资源的总称,是程序执行的一次完整过程(创建、调度、执行、消亡)
(1)程序的组成:
正文段、用户数据段、系统数据段(PCB<进程控制块>、PC、堆栈)
<1>PCB:
- 进程ID
- 用户名、用户组名
- 进程的状态、优先级
- 文件描述符表
<2>PC(程序寄存器):
- 记录程序下一条指令的地址
- 堆栈(栈)
(2)进程的类型
<1>交互进程:和终端相关,可以在前台运行,也可以在后台
<2>批处理进程:和终端无关,可以将指定的进程放在一个工作队列中按顺序执行,一般由系统管理员操作
<3>守护进程:和终端无关,在后台一直循环执行任务
(3)进程的状态
进程相关指令
ps -ef -->查看当前系统进程
ps -aux -->查看当前系统进程,还会1显示当前进程状态
top -->每隔三秒,显示进程的实时信号
<1>运行态(就绪态)–R–正在运行或准备运行的进程
等待态: [区别在于能否被信号打断]
<3>可中断等待态–S–
<4>不可中断等待态–D–
<5>暂停态–T–暂停运行,直到有信号唤醒位置
<6>僵尸态–Z–进程结束后,没有进行资源回收,该进程变为僵尸态
2、进程相关接口函数
1、创建子进程–fork
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
返回值:
成功创建一个新的子进程,父进程返回子进程的PID号,子进程返回0
失败父进程返回-1,没有子进程被创建
PPId-->父进程
getpid()--->获取当前进程的pid
父子进程:
一 个进程通过 fork 函数创建一个新的进程,原本进程称为新进程的父进程,新的进程称为原进程的子进程
子进程会维承父进程中几乎所有数据
(1)、如果父进程优先于子进程结束:
子进程称为孤儿进程,由前台进程变为后台进程,统一由init进程收养
(2)、如果子进程优先于父进程结束:
子进程状态变为僵尸态
一般来说,如果子进程先于父进程结束,子进程应该统一由父进程回收
***子进程在 fork语句的下一条指令开始执行
虽然当父进程结束后系统会自动回收,不过当是一些不方便结束的父进程:
如:服务器、网页等,我们就需要把进程给结束掉,所有接下来时进程的结束。
2、结束进程–exit()/_exit()
#include <stdlib.h>
void exit(int status);
参数:
status:表示进程退出的状态
--------------------------------------------------------
#include <unistd.h>
void _exit(in