Linux关于进程
Posted 小公子”
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux关于进程相关的知识,希望对你有一定的参考价值。
文章目录
程序在系统中运行,都是以进程的形式存在的!
下面来介绍如何查看系统中的进程
一、查看进程
程序运行在进程系统上,称为 - 进程
Linux系统中的ps命令支持三个不同类型的命令行参数。
- Unix:单破折号
- BSD:无破折号
- GNU:双破折号
下面只介绍 Unix 的,也就是说 单破折号的。
-A #显示所有进程
-a #显示除控制进程和无终端的进程之外的所有进程
-e #显示所有进程
-f #显示完整格式输出
-l #显示长列表
-H #层级显示进程(树状)
-L #显示进程中的线程
上述只列出了我认为比较有用的,还有很多其他的,可以根据需要自己去查找补充。
举例子:ps -ef
kylin@kylin-thinkpadx390:~$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 09:04 ? 00:00:01 /sbin/init splash
root 2 0 0 09:04 ? 00:00:00 [kthreadd]
root 3 2 0 09:04 ? 00:00:00 [rcu_gp]
root 4 2 0 09:04 ? 00:00:00 [rcu_par_gp]
root 6 2 0 09:04 ? 00:00:00 [kworker/0:0H-events_highpri
root 9 2 0 09:04 ? 00:00:00 [mm_percpu_wq]
root 10 2 0 09:04 ? 00:00:00 [ksoftirqd/0]
其中:
UID #启动该进程的用户
PID #进程的进程号
PPID #父进程的进程号
C #进程生命周期中的cpu利用率
STIME #进程开始的系统时间
TTY #进程启动时的终端设备
TIME #运行进程需要的累计CPU时间
CMD #启动的程序名称
如果想显示的更全一些,可以使用:ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 18715 18703 0 80 0 - 3435 do_wai pts/0 00:00:00 bash
4 R 1000 26892 18715 0 80 0 - 3622 - pts/0 00:00:00 ps
其中:
F #内核分配给进程的系统标记
S #进程的状态(0-正在运行,S-正在休眠,R-可运行,正在等待运行,Z-僵化,进程已结束但父进程已不存在,T-停止)
PRI #优先级,数字越大,优先级越低
NI #谦让度nice
ADDR #进程的内存地址
SZ #假如进程被换出,所需交换空间的大致大小
WCHAN #进程休眠的内核函数的地址
ps -efH
kylin@kylin-thinkpadx390:~$ ps -efH
UID PID PPID C STIME TTY TIME CMD
root 833 1 0 09:04 ? 00:00:00 /bin/bash /usr/bin/execsta
root 884 833 0 09:04 ? 00:00:00 /usr/bin/miracle-wifid -
root 1082 884 0 09:04 ? 00:00:00 /usr/bin/miracle-sinkc
ps:我使用的是麒麟系统,国产Linux,里面的命令和Linux基本是一致的。上述,都是从麒麟系统中截取出来的。
ps
命令只能显示某个特定时间点的信息,如果想要实时监测,需要用top
命令。
下面来介绍一下 实时监测进程指令 top
二、实时监测进程
top
- 输出的第一部分:第一行显示了 当前时间、系统的运行时间、登入的用户数以及系统的平均负载
平均负载有3个值:最近1分钟,最近5分钟和最近15分钟的平均负载。
- 第二行显示了概要的进程信息,top命令的输出中进程叫做任务;多少个进程处在运行、休眠、停止或是僵化(僵化状态是指进程完成了,但父进程没有响应)
- 第三行显示了CPU信息,
最后一部分显示了当前运行中的进程的下详细列表,有些类似ps
命令。
PID #进程号
USER #进程属主的名字
PR #进程的优先级
NI #进程的谦让度
VIRT #进程占用的虚拟内存总量
RES #进程占用的物理内存总量
SHR #进程和其他进程共享的内存总量
S #进程的状态(D-可中断的休眠状态,R-运行状态,S-休眠状态,T-跟踪状态或停止状态,Z-代表僵化状态)
%CPU #进程使用的CPU时间比例
%MEM #进程使用的内存占可用内存的比例
TIME+ #自进程启动到目前为止的CPU时间总量
COMMAND #进程的命令行名称,也就是启动的程序名
其中,top
命令在启动时会按照 %CPU 来排序,也可以重新排序。
上面两小节记述了进程的查看方式,那么如何结束一个进程呢?
进程的状态有多种,针对不同的进程状态,需要不同的处理方式。
接下来,简单记述一下进程状态
三、进程状态
一般来说,进程有三个状态:
- 就绪
- 运行
- 阻塞
其中,根据状态之间可相互转换,可以得出有以下六种状态转换,可以看成三组:
1. 就绪 TO 运行:正常程序
2. 运行 TO 就绪:两种可能,a.进程占用时间长,系统分配给该进程的时间是有限的 b.优先级问题
3. 就绪 TO 阻塞:不存在此种可能,没有运行,谈何阻塞
4. 阻塞 TO 就绪:进程等待的事件发生,就进入就绪队列
5. 运行 TO 阻塞
6. 阻塞 TO 运行:不存在此种可能,即时给阻塞进程分配CPU,也不会执行,操作系统在进行调度时不会从阻塞队列进行挑选,会从就绪队列进行挑选
还可能见到的一些其他状态
- 挂起:进程从内存调度到外存中的一种状态,可理解为暂时被淘汰出内存的进程。
- 可运行
- 浅睡眠:进程正在睡眠(被阻塞),可以通过其他进程信号或时钟中断唤醒
- 深睡眠:和浅睡眠类似,但不可被其他进程或时钟唤醒
- 暂停:进程暂停执行,接受某种处理
- 僵死:进程已经结束但未释放进程控制块
第三节记述了进程的各种可能状态,
下面来介绍一下,如何结束进程?
四、结束进程
Linux进程信号:
信号 | 名称 | 描述 |
---|---|---|
1 | HUP | 挂起 |
2 | INT | 中断 |
3 | QUIT | 结束运行 |
9 | KILL | 无条件终止 |
11 | SEGV | 段错误 |
15 | TERM | 尽可能终止 |
17 | STOP | 无条件停止运行,但不终止 |
18 | TSTP | 停止或暂停,但继续在后台运行 |
19 | CONT | 在STOP或TSTP之后恢复执行 |
解释:
- 进程 终止和停止的区别:停止可以理解为暂停,终止可理解为彻底结束
kill
注意:
- 只能使用进程号,而不能使用命令名
- 要发送进程信号,必须是进程的属主或是root用户
kill PID #其中PID为进程号
killall
- 支持通过 进程名 来结束进程
- 也支持通配符
killall http*
以上是关于Linux关于进程的主要内容,如果未能解决你的问题,请参考以下文章