Linux操作系统:基础篇8基本功能之进程管理

简介: 进程:进程可以理解为程序执行的一个实例,它包括可执行程序以及与其相关的系统资源,比如打开的文件、挂起的信号、内核内部数据、处理器状态、内存地址空间及包含全局变量的数据段等。从内核的角度看,进程也可以称为任务。

一、 进程及其相关概念

  进程:进程可以理解为程序执行的一个实例,它包括可执行程序以及与其相关的系统资源,比如打开的文件、挂起的信号、内核内部数据、处理器状态、内存地址空间及包含全局变量的数据段等。从内核的角度看,进程也可以称为任务。

 进程状态包括以下五种:

 (1)task_running(运行态:R):进程是可执行的;或者正在执行,或者在运行队列中等待执行。

 (2)task_interruptible(可中断睡眠态:S):进程被阻塞,等待某些条件的完成。一旦完成这些条件,内核就会将该进程的状态设置为运行态。

 (3)task_uninterruptible(不可中断睡眠态:D):进程被阻塞,等待某些条件的完成。与可中断睡眠态不同的是,该状态进程不可被信号唤醒。

 (4)task_zombie(僵死态:Z):该进程已经结束,但是其父进程还没有将其回收。

 (5)task_stop(终止态:T):进程停止执行。通常进程在收到sigstop、sigttin、sigttou等信号的时候会进入该状态。

进程的整个生命周期如下:

 一个进程被fork出来后,进入就绪态;当被调度到获得CPU执行时,进入执行态;如果时间片用完或被强占时,进入就绪态;资源得不到满足时,进入睡眠态(深度睡眠或浅度睡眠),比如一个网络程序,在等对方发包,此时不能占着CPU,进入睡眠态,当包发过来时,进程被唤醒,进入就绪态;如果被暂停,进入停止态;执行完成后,资源释放,此时父进程wait4还未收到它的信号,进入僵死态。即整个周期可能会涉及的状态有:就绪态,执行态,僵死态,停止态,睡眠态。

d19b98d14693449887f784ac23ee6131.png进程控制块PCB

 每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息。Linux内核的进程控制块是task_struct结构体。task_struct是Linux内核的一种数据结构,它会被装载到RAM并且包含着进程的信息。每个进程都把它的信息放在task_struct这个数据结构里,task_struct包含了许多内容:

 标示符:描述本进程的唯一标示符,用来区别其他进程。

 状态:任务状态,退出代码,退出信号等。

 优先级:相对于其他进程的优先级。

 程序计数器:程序中即将被执行的下一条指令的地址。

 内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。

 上下文环境:进程执行时处理器的寄存器中的数据。

 I/O状态信息:包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。

 记账信息:可能包括处理器时间总和,使用的时钟总和,时间限制,记账号等。

 保存在进程信息的数据结构叫做task_struct,并且可以在include/linux/sched.h里找到它。所有运行在系统里的进程都以task_struct链表的形式存在内核里。

二、进程管理命令

1、ps命令

 ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。

(1)语法

 ps [参数]

(2)常用参数

41750636e2834613918bb27b592c564d.png

(3)au(x) 输出格式:

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

359d92fd27bb40ff983346ac661083ef.png

(4)示例:

<1>查找指定进程格式,例如显示 php 的进程:
     # ps -ef | grep php
  <2>显示进程信息:
     # ps -A
  <3>显示指定用户信息:
     #ps -u root //显示root进程用户信息
  <4>显示所有进程信息,连同命令行:
     # ps -ef //显示所有命令,连带命令行
  <5>根据CPU使用率来升序排序:
    #ps -aux --sort -pcpu | less

2、pstree命令

  pstree命令将所有行程以树状图显示,树状图将会以 pid (如果有指定) 或是以 init 这个基本行程为根 (root),如果有指定使用者 id,则树状图会只显示该使用者所拥有的行程。

 使用权限:所有使用者。

(1)语法:

    pstree [-acGhlnpuUV][-H <程序识别码>][<程序识别码>/<用户名称>]

(2)常用参数:

671a919b1fe541c1ace6bb3136978ed8.png

(3)示例:

&emsp;&emsp;&emsp;&emsp;<1>显示完成的树形结构:
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;#pstree –a
init
NetworkManager--pid-file=/var/run/NetworkManager/NetworkManager. pid -dhclient-d-4-sf/usr/libexec/nm-dhcp-client.action-pf/var/run/dhclient-eth0.pid ...
L-{NetworkManager} --VBoxClient --clipboard
L-VBoxClient --clipboard  Hx--1024

   <2>显示进程号:

#pstree -p
init(1)---NetworkManager(6362)---dhclient(6377)
L-{NetworkManager}
(6379)
--VBoxClient(7869)---VBoxClient(7870)---{VBoxClient}(7872) --VBoxClient(7882)---VBoxClient(7883)
-VBoxClient(7890)--VBoxClient(7891)-{VBoxClient}(7894) -VBoxClient(7898)---VBoxClient(7899)--{VBoxClient}(7901)
L-{VBoxClient}(7903)  Hx--1024

3、nice命令

 nice命令以更改过的优先序来执行程序,如果未指定程序,则会印出目前的排程优先序,内定的 adjustment 为 10,范围为 -20(最高优先序)到 19(最低优先序)。

 使用权限:所有使用者。

(1)语法:

nice  [参数]

(2)参数:

n:指定进程的优先级(整数)。

(3)示例:

    <1>若不带任何参数运行命令nice,则显示出当前的程序运行优先级:

#nice
      0

    <2>优先级范围为-20~19,当调整后的优先级小于-20时,以优先级-20 来运行程序;当调整后的优先级大于19时,则以19的优先级运行程序;如下

#nice -n -21 nice
       -20
      #nice –n 20 nice
       19

4、kill命令

 kill 命令用于删除执行中的程序或工作。

 kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。程序或工作的编号可利用 ps 指令或 jobs 指令查看。

(1)语法: kill[参数][进程号]

(2)常用参数:

bbda8870e04546779ec15e41f9688553.png

(3)示例:

   <1>列出所有信号名称

#kill -l
SIGHUP  2)  SIGINT  SIGQUIT SIGILL  5)  SIGTRAP 
3)
4)
6)  SIGABRT 7)  SIGBUS  8)  SIGFPE  SIGKILL 10) SIGUSR1 
9)
11) SIGSEGV 12)SIGUSR2  13)SIGPIPE  14)SIGALRM  15)SIGTERM  
16) SIGSTKFLT 17)SIGCHLD  18)SIGCONT  19)SIGSTOP  20) SIGTSTP 
21) SIGTTIN 22)SIGTTOU  23)SIGURG 24)SIGXCPU  25)SIGXFSZ  
26)|  SIGVTALRM 27)SIGPROF  28)SIGWINCH 29)SIGIO  30) SIGPWR  
31) SIGSYS  34)SIGRTMIN 35)SIGRTMIN+1 36) SIGRTMIN+2  37)SIGRTMIN+3 
38) SIGRTMIN+4  39)SIGRTMIN+5 40)SIGRTMIN+6 41) SIGRTMIN+7  42) SIGRTMIN+8  
43) SIGRTMIN+944) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49)SIGRTMIN+15 50)SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 
53) SIGRTMAX-1154)  SIGRTMAX-1055)  SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7  
58) SIGRTMAX-6 59)  SIGRTMAX-5 60)1 SIGRTMAX-4 61)  SIGRTMAX-3  62) SIGRTMAX-2  
63) SIGRTMAX-1 64)  SIGRTMAX  Hx--1024

说明:只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。 下面是常用的信号:

HUP 1 终端断线、INT 2 中断(同 Ctrl + C)、QUIT 3 退出(同 Ctrl + \)、TERM 15 终止、KILL 9 强制终止、CONT 18 继续(与STOP相反, fg/bg命令)、STOP 19 暂停(同 Ctrl + Z)

   <2>得到指定信号的数值

#kill -I KILL9
# kill -I TERM15

   <3>先用ps查找进程,然后用kill杀掉

#ps -ef arep vim
root  3268 2884 0 16:21 pts/1 00:00:00 vim install.log  
root3370 2822 0 16:21 pts/000:00:00 grep vim# kill 3268

   <4>彻底杀死进程

#kill –9 3268 

   <5>杀死指定用户所有进程

#kill -9 $(ps -ef | grep peidalinux)
#kill -u peidalinux
相关文章
|
2月前
|
监控 Linux 开发者
理解Linux操作系统内核中物理设备驱动(phy driver)的功能。
综合来看,物理设备驱动在Linux系统中的作用是至关重要的,它通过与硬件设备的紧密配合,为上层应用提供稳定可靠的通信基础设施。开发一款优秀的物理设备驱动需要开发者具备深厚的硬件知识、熟练的编程技能以及对Linux内核架构的深入理解,以确保驱动程序能在不同的硬件平台和网络条件下都能提供最优的性能。
126 0
|
4月前
|
Web App开发 Linux 程序员
获取和理解Linux进程以及其PID的基础知识。
总的来说,理解Linux进程及其PID需要我们明白,进程就如同汽车,负责执行任务,而PID则是独特的车牌号,为我们提供了管理的便利。知道这个,我们就可以更好地理解和操作Linux系统,甚至通过对进程的有效管理,让系统运行得更加顺畅。
115 16
|
4月前
|
Unix Linux
对于Linux的进程概念以及进程状态的理解和解析
现在,我们已经了解了Linux进程的基础知识和进程状态的理解了。这就像我们理解了城市中行人的行走和行为模式!希望这个形象的例子能帮助我们更好地理解这个重要的概念,并在实际应用中发挥作用。
93 20
|
4月前
|
Java 关系型数据库 MySQL
在Linux操作系统上设置JDK、Tomcat、MySQL以及J2EE后端接口的部署步骤
让我们总结一下,给你的Linux操作系统装备上最强的军队,需要先后装备好JDK的弓箭,布置好Tomcat的阵地,再把MySQL的物资原料准备好,最后部署好J2EE攻城车,那就准备好进军吧,你的Linux军团,无人可挡!
113 18
|
3月前
|
监控 Shell Linux
Linux进程控制(详细讲解)
进程等待是系统通过调用特定的接口(如waitwaitpid)来实现的。来进行对子进程状态检测与回收的功能。
75 0
|
3月前
|
存储 负载均衡 算法
Linux2.6内核进程调度队列
本篇文章是Linux进程系列中的最后一篇文章,本来是想放在上一篇文章的结尾的,但是想了想还是单独写一篇文章吧,虽然说这部分内容是比较难的,所有一般来说是简单的提及带过的,但是为了让大家对进程有更深的理解与认识,还是看了一些别人的文章,然后学习了学习,然后对此做了总结,尽可能详细的介绍明白。最后推荐一篇文章Linux的进程优先级 NI 和 PR - 简书。
102 0
|
3月前
|
存储 Linux Shell
Linux进程概念-详细版(二)
在Linux进程概念-详细版(一)中我们解释了什么是进程,以及进程的各种状态,已经对进程有了一定的认识,那么这篇文章将会继续补全上篇文章剩余没有说到的,进程优先级,环境变量,程序地址空间,进程地址空间,以及调度队列。
65 0
|
3月前
|
Linux 调度 C语言
Linux进程概念-详细版(一)
子进程与父进程代码共享,其子进程直接用父进程的代码,其自己本身无代码,所以子进程无法改动代码,平时所说的修改是修改的数据。为什么要创建子进程:为了让其父子进程执行不同的代码块。子进程的数据相对于父进程是会进行写时拷贝(COW)。
67 0
|
10月前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
421 0
Vanilla OS:下一代安全 Linux 发行版
|
7月前
|
运维 自然语言处理 Ubuntu
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot 是阿里云推出的一款操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行和系统运维调优等功能。通过简单的命令行操作,用户可以快速获取所需信息并执行任务,极大提升了Linux系统的使用效率。安装步骤简单,只需在阿里云服务器上运行几条命令即可完成部署。使用过程中,OS Copilot不仅能帮助查找命令,还能处理文件和复杂场景,显著节省了查找资料的时间。体验中发现,部分输出格式和偶尔出现的英文提示有待优化,但整体非常实用,特别适合Linux初学者。
371 10

热门文章

最新文章