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
相关文章
|
4月前
|
Ubuntu 物联网 Linux
从零安装一个Linux操作系统几种方法,以Ubuntu18.04为例
一切就绪后,我们就可以安装操作系统了。当系统通过优盘引导起来之后,我们就可以看到跟虚拟机中一样的安装向导了。之后,大家按照虚拟机中的顺序安装即可。 好了,今天主要介绍了Ubuntu Server版操作系统的安装过程,关于如何使用该操作系统,及操作系统更深层的原理,还请关注本号及相关圈子。
|
4月前
|
监控 Ubuntu Linux
什么Linux,Linux内核及Linux操作系统
上面只是简单的介绍了一下Linux操作系统的几个核心组件,其实Linux的整体架构要复杂的多。单纯从Linux内核的角度,它要管理CPU、内存、网卡、硬盘和输入输出等设备,因此内核本身分为进程调度,内存管理,虚拟文件系统,网络接口等4个核心子系统。
345 0
|
4月前
|
Unix 物联网 Linux
都什么年代了,你还不懂啥是Linux操作系统
至于华为鸿蒙操作系统是不是独树一帜,这个留给各位阅读本文的网友们来讨论
126 0
|
4月前
|
安全 Linux iOS开发
linux属于什么操作系统
Linux是一种自由和开放源代码的操作系统,具有高度的灵活性和可定制性。与常见的操作系统如Windows和macOS相比,Linux具有自由、安全和稳定等优势。Linux已广泛应用于服务器、桌面电脑、超级计算机和嵌入式设备等领域,并且在未来的发展前景广阔。由于其自由和开放源代码的特性,Linux还促进了计算机技术和社区的发展,为全球的计算机用户提供了更多的选择和可能性。
|
4月前
|
安全 Ubuntu Unix
关于Linux操作系统,你必须要知道的事
我们可以看到无论是Debian还是Buildroot都有各自的特点,为客户提供了更大的选择空间和灵活性,大家可以根据自己的需求选择合适的版本来满足终端用户的体验和功能需求。从平技术将会一直关注更多更安全、灵敏、易于开发的Linux版本,做好适配工作,不断为客户带来“简单开发、方便应用”的使用体验。
|
4月前
|
安全 Ubuntu Linux
如何安装Linux操作系统?
此时,您可以选择重新启动计算机,然后从硬盘上的Linux系统启动。以上是一个大致的安装过程。请注意,不同的Linux发行版可能会在细节上有所差异,因此在进行安装之前,请确保您阅读并理解了相应发行版的安装指南或文档。
|
4月前
|
Ubuntu Linux 开发者
Linux发行版比较:选择适合你的操作系统
在做出选择之前,建议您先在虚拟机或双系统环境中尝试不同的发行版,根据自己的体验和需求做出决策。选择适合自己的Linux发行版是一个个人化和主观的过程,最重要的是找到符合自己需求和喜好的发行版,让您在使用Linux系统时感到舒适和方便。
|
4月前
|
Ubuntu Unix Linux
操作系统的最强入门科普(Unix/Linux篇)
下期文章,小枣君会重点聊聊Windows和macOS那条线。敬请关注! 如果大家觉得文章不错,还请帮忙多多转发!谢谢!
|
4月前
|
Web App开发 缓存 Rust
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
655 0
Vanilla OS:下一代安全 Linux 发行版