进程介绍
进程与程序:
-
程序是存储在磁盘上的可执行文件,里面包含可执行的机器指令和数据的静态实体;进程是处于活跃状态的计算机程序,也就是正在运行中的程序
-
一个运行中的程序,可能由多个进程组成,但至少要有一个进程,称为主进程,同时可以通过系统调用创建出若干个子进程同时进行任务
-
一个程序也可以同时运行出若干个进程
进程的分类:
根据进程的功能不同一般分为三类:交互进程、批处理进程、守护进程
-
交互进程:由一个shell终端启动的进程,在执行过程中,需要与用户进行交互操作,可以运行在前台,也可以运行在后台
-
批处理进程:该进程是一个进程指令集合,负责按顺序去启动其他进程
-
守护进程:一般都处于活跃状态,运行在后台,由系统在开机时通过脚本自动创建并运行。
进程查看:
简单形式:
ps: 以简略的形式显示出当前用户有控制终端控制的进程信息
复杂形式:
ps auxw 以更宽大的列表形式详细地列出所有用户的进程信息
a - 所有用户的有终端控制的进程
x - 包括无终端控制的进程
u - 以更详细的内容显示
w - 以更大的列宽显示
e - 显示所有进程
f - 显示出其他信息字段
进程的信息列表:
-
USER : 进程属主
-
PID : 进程ID
-
%CPU : CPU使用率
-
%MEM :内存使用率
-
VSZ : 占用虚拟内存大小(Kb)
-
RSS : 占用物理内存大小(Kb)
-
TTY :控制终端设备号 ? 表示无终端控制 ,例如后台进程
-
STAT :进程状态 ,可有以下值:
-
O - 就绪态 ,表示等待被调度
-
R - 运行态,Linux下没有O状态,就绪态也用R表示
-
S - 可被唤醒睡眠态。当系统中断、获得资源、收到信号等都可以被唤醒转入回运行态
-
D - 不可被唤醒睡眠态。只能被wake_up系统调用唤醒
-
T - 暂停态。收到停止类信号转入暂停态,当收到SIGCONT(18)转入运行态
-
Z - 僵尸态。已经停止运行,但是父进程尚未回收相关资源
-
X - 死亡态。不可见
-
N - 低优先级
-
< - 高优先级
-
s - 进程组的领导
-
l - 多线程化的进程
-
+ 在前台的进程组中的
-
L - 有被锁入内存的分页
-
-
START : 进程启动的时间点
-
TIME : 进程运行的耗时时间
-
COMMAND :启动进程的指令
# 查看指定进程
ps aux | grep bash #过滤出包含bash关键字的进程信息
# 分页查看进程
ps aux | more
# 查看指定用户进程
ps -u 用户名 uw
父进程与子进程:
-
一个进程可以创建出另一个进程,创建者称为被创建者的父进程,被创建者称为创建者的子进程
-
父进程创建出子进程后,子进程在操作系统的调度下与父进程同时运行
孤儿进程与僵尸进程:
-
子进程先于父进程结束,子进程一定会向父进程发送SIGCHLD(17)信号,父进程负责回收子进程的相关资源
-
如果父进程先于子进程结束,此时子进程称为孤儿进程,同时会被孤儿院进程收养,就成为了孤儿院进程的子进程
-
早期孤儿院进程init pid是1
-
现在孤儿院进程不是1了,在图形化界面中是/sbin/upstart --user
-
-
子进程先于父进程结束,但是父进程没有去回收子进程相关资源,该子进程就成为僵尸进程
进程标识符:
-
每个进程都有一个以非负整数表示的唯一标识,称为进程ID,简称PID
-
进程ID在任意时刻内是唯一的,但是可以重用,当一个进程结束后,它的进程ID就会被分配个后面创建的其他进程使用
-
延时重用:当进程结束后,它的ID不会立即被系统重新分配,会隔一段时间后再重新分配
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void);
功能:获取当前进程的ID
pid_t getppid(void);
功能:获取当前进程的父进程ID