- 进程:程序在计算机中的一次执行过程
- 过程:
内核将程序读入内存,为程序镜像分配内存空间
内核为该进程分配进程标志符PID
内核为该进程保存PID及相应的进程状态信息 - 抽象:
一个独立的逻辑控制流—-独占处理器
一个私有的地址空间—-独占存储器系统 - 本质:
程序在地址空间中按照代码逻辑控制流执行
资源分配最小单位
- 过程:
进程状态
- 就绪:进程已得到除CPU外的所有必要资源,获得CPU立即执行
- 运行:程序正在CPU上执行
- 阻塞:等待某个事件发生而无法执行时,放弃CPU
进程与程序的区别
- 进程:动态 有生命周期 只能对应一个程序
- 程序:静态 指令的集合 可以对应多个进程
查看进程
CMD | 含义 |
---|---|
ps | 查看本终端上正在运行的进程 |
ps -o pid,ppid,cmd | 查看pid ,ppid ,cmd |
ps -p 进程PID | 查看某进程 |
ps -aux | 查看所有进程 a:终端上所有用户的进程 u:以用户为中心显示详细信息 x:无终端进程 |
ps -ef | e:所有进程 f:树状显示 |
5. 创建进程
CMD | 含义 |
---|---|
pid_t fork(void); | 复制父进程,返回两次pid,即父子进程的关系,并发执行,复制出一块新内存,拥有相同但独立的地址空间,文件可共享 |
int system(const char* commond); | 阻塞父进程,shell执行命令或程序,执行后不覆盖原内存内容,调用完后返回 |
exec | 替换原进程,函数族共6个函数,执行后覆盖原内存内容,调用完后不再返回 |
6. 结束进程
main()
函数退出
调用void exit(int status)
函数,回收资源
调用void _exit(int status)
linux系统函数,不回收资源
调用void abort(void)
函数,错误终止,强行退出
信号终止,可以终止其他进程
7. 停止进程
1. 休眠
int sleep(unsigned int secs);
返回未休眠的秒数
2. 暂停
int pause(void);
等待信号
如果程序没有处理信号,直接中断,执行默认信号处理,程序后续代码不再执行
如果程序存在信号处理,执行信号处理后执行后续代码
3. 等待
pid_t wait(int* status);
pid_t waitpid(pid_t pid,int* status,int options);
阻塞状态等待子进程退出,回收资源
8. 孤儿进程和僵尸进程
孤儿进程:父进程先于子进程退出,init作为新的父进程,无害
僵尸进程:子进程退出,父进程未获取子进程的状态信息(调用wait()
或wait(pid)
),不能回收资源,避免出现僵尸进程