PS 进程
什么是进程?
所谓进程,它是已启动的可执行程序的运行中实例。进程有以下组成部分
- 已分配内存的地址空间
- 安全属性,包括所有权凭据和特权
- 程序代码的一个或多个执行线程
- 进程状态
进程的环境包括:
- 本地和全局变量
- 当前调度上下文
- 分配的系统资源,如文件描述符和网络端口
进程状态
在多任务处理操作系统中,每个CPU(或CPU核心)在一个时间点上处理一个进程。在进程运行时,他对CPU时间和资源分配的直接要求会有变化。进程分配有状态,状态会随环境需求而改变。
Linux进程状态
状态 | 描述 |
---|---|
T | 进程已被停止(暂停) |
Z | 进程已释放其全部资源(PID除外) |
R | 进程正在CPU上运行或者正在等待于CPU上运行 |
S | 进程正在处于睡眠状态,直至满足某些条件后才会启动 |
D | 进程正在等待I/O或某些条件得到满足,并且绝对不会响应信号 |
PS命令用于列出当前的进程。该命令可以提供详细的进程信息,包括:
- 用户识别符(UID)他确定进程的特权;
- 唯一进程识别符(PID);
- CPU和已经花费的实时时间;
- 进程在各种位置上分配的内存数量;
- 进程的位置STDOUT,称为控制终端
- 当前的进程状态
重点
Linux版的ps命令支持三种选项格式,包括:
- UNIX(POSIX)选项,可以分组但必须以连字符开头;
- DSB选项,可以分组但不可以与连字符;
- GNU长选项,以双连字符开头
- 例如,ps -aux不同于ps aux
常用显示列表(选项aux)显示所有进程,包含用户感兴趣的列,以及没有控制终端的进程。长列表(选项lax)提供更多技术详细信息,但可以通过避免查询用户名来加快显示。相似的UNIX语法使用选项-ef来显示所有进程
默认情况下,如果不使用选项而运行ps,将选择具有与当前用户相同的有效用户ID(EUID)并与调用ps所处同一终端关联的所有进程。
- 方括号中的进程(通常位于顶部)为调度的内核线程
- 僵停在ps列表中显示为exiting会defunct
- ps仅显示一次。如需重复更新的进程显示,请运行top(1)
- ps可以采用树形格式显示,来查看父/子关系
- 默认的输出没有排序。显示顺序与系统进程表的顺序匹配,在进程终止和新进程创建时重新使用列表行。输出可能会按照时间顺序显示,但不一定,除非使用明确的呃-O或- -sort选项
练习后台和前台进程
- 打开两个终端窗口
- 在做窗口中启动一个进程,该进程以一秒为间隔持续向~/outfile 文件附加单词”rock“和一个空格,整个命令集必须包含在括号内,以便作业控制可以将该集合解释为一个作业
- 在右窗口中,使用tail确认新进程正在写入该文件
- 在左窗口中暂停正在运行的进程。shell将返回作业ID用方括号,在右窗口中确认进程输出已停止
ctrl +z
- 在左窗口中,查看jobs列表,+表示当前的作业,在后台重新启动改作业,在右侧窗口中确定输出再次处于活动状态
- 终止rock进程,在左侧窗口中,使作业进入前台(fg),然后使用ctrl +c 终止该作业。确认rock进程
已消失。在右窗口中,确认rock输出不在活动
5.在左侧窗口中,使用ps查看剩余的作业。暂停中的作业具有状态T。其他后台作业为睡眠中(S),因为ps在显示时处于‘CPU上’(R)