Linux关于进程

Posted "sudo

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进程信号:

信号名称描述
1HUP挂起
2INT中断
3QUIT结束运行
9KILL无条件终止
11SEGV段错误
15TERM尽可能终止
17STOP无条件停止运行,但不终止
18TSTP停止或暂停,但继续在后台运行
19CONT在STOP或TSTP之后恢复执行

解释:

  • 进程 终止和停止的区别:停止可以理解为暂停,终止可理解为彻底结束

kill

注意:

  1. 只能使用进程号,而不能使用命令名
  2. 要发送进程信号,必须是进程的属主或是root用户
kill PID #其中PID为进程号

killall

  • 支持通过 进程名 来结束进程
  • 也支持通配符
killall http*

以上是关于Linux关于进程的主要内容,如果未能解决你的问题,请参考以下文章

Linux 学习笔记 更多的bash shell命令

linux优化小节

Linux kernel简介

操作系统核心知识点整理--进程篇

关于Linux服务器部署

linux bash,驼峰式字符串用破折号分隔