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
相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
相关文章
|
1月前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
本文旨在探讨Linux操作系统中的进程管理机制,包括进程的创建、执行、调度和终止等环节。通过对Linux内核中相关模块的分析,揭示其高效的进程管理策略,为开发者提供优化程序性能和资源利用率的参考。
69 1
|
2天前
|
消息中间件 Linux
Linux:进程间通信(共享内存详细讲解以及小项目使用和相关指令、消息队列、信号量)
通过上述讲解和代码示例,您可以理解和实现Linux系统中的进程间通信机制,包括共享内存、消息队列和信号量。这些机制在实际开发中非常重要,能够提高系统的并发处理能力和数据通信效率。希望本文能为您的学习和开发提供实用的指导和帮助。
42 20
|
2天前
|
存储 弹性计算 NoSQL
os-copilot安装与多项功能测评
本文介绍了os-copilot的安装及多项功能测评。首先,通过xShell连接服务器并使用`rpm -q os-copilot`检查是否已安装,若未安装则用`yum install`命令安装。接着,配置ACCESS_KEY信息以连接阿里云服务。深入测试部分展示了-t参数用于环境健康检查、-f参数处理复杂任务、|参数解释代码等功能,还演示了编写shell脚本创建和启动Redis的便捷性。这些功能对基础运维和开发人员有较大帮助。
36 12
|
18小时前
|
弹性计算 自然语言处理 Linux
Os Copilot功能测评
作为一名开发工程师,我在工作中偶尔涉及云资源的运维和管理。本文记录了我使用OS Copilot的-t/-f/管道功能的体验及遇到的问题。通过阿里云ECS下单、密钥配置、镜像选择等步骤成功登录服务器后,根据文档安装OS Copilot并测试其功能。-t参数可快速获取系统健康度结论;-f参数支持自然语言处理文件需求;管道功能帮助理解配置文件内容。这些功能极大提升了工作效率,但仍存在上下文记忆不足的问题。
|
22天前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
91 13
|
16天前
|
监控 安全 Linux
启用Linux防火墙日志记录和分析功能
为iptables启用日志记录对于监控进出流量至关重要
|
29天前
|
SQL 运维 监控
南大通用GBase 8a MPP Cluster Linux端SQL进程监控工具
南大通用GBase 8a MPP Cluster Linux端SQL进程监控工具
|
1月前
|
安全 Linux 数据安全/隐私保护
深入Linux操作系统:文件系统和权限管理
在数字世界的海洋中,操作系统是连接用户与硬件的桥梁,而Linux作为其中的佼佼者,其文件系统和权限管理则是这座桥梁上不可或缺的结构。本文将带你探索Linux的文件系统结构,理解文件权限的重要性,并通过实际案例揭示如何有效地管理和控制这些权限。我们将一起航行在Linux的命令行海洋中,解锁文件系统的奥秘,并学习如何保护你的数据免受不必要的访问。
|
1月前
|
搜索推荐 Linux
深入理解Linux操作系统的启动过程
本文旨在揭示Linux操作系统从开机到完全启动的神秘面纱,通过逐步解析BIOS、引导加载程序、内核初始化等关键步骤,帮助读者建立对Linux启动流程的清晰认识。我们将探讨如何自定义和优化这一过程,以实现更高效、更稳定的系统运行。
|
1月前
|
存储 缓存 网络协议
Linux操作系统的内核优化与性能调优####
本文深入探讨了Linux操作系统内核的优化策略与性能调优方法,旨在为系统管理员和高级用户提供一套实用的指南。通过分析内核参数调整、文件系统选择、内存管理及网络配置等关键方面,本文揭示了如何有效提升Linux系统的稳定性和运行效率。不同于常规摘要仅概述内容的做法,本摘要直接指出文章的核心价值——提供具体可行的优化措施,助力读者实现系统性能的飞跃。 ####

热门文章

最新文章

下一篇
开通oss服务