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的迁移。
相关文章
|
4天前
|
人工智能 安全 Linux
Linux操作系统的演变与未来趋势###
本文深入探讨了Linux操作系统从诞生至今的发展历程,分析了其开源模式对技术创新和IT行业的影响,并展望了Linux在未来技术生态中的角色。通过历史回顾、现状分析和未来预测,本文旨在为读者提供一个关于Linux操作系统全面而深入的视角。 ###
|
5天前
|
缓存 网络协议 Linux
深入探索Linux操作系统的内核优化策略####
本文旨在探讨Linux操作系统内核的优化方法,通过分析当前主流的几种内核优化技术,结合具体案例,阐述如何有效提升系统性能与稳定性。文章首先概述了Linux内核的基本结构,随后详细解析了内核优化的必要性及常用手段,包括编译优化、内核参数调整、内存管理优化等,最后通过实例展示了这些优化技巧在实际场景中的应用效果,为读者提供了一套实用的Linux内核优化指南。 ####
19 1
|
16天前
|
存储 运维 监控
深入Linux基础:文件系统与进程管理详解
深入Linux基础:文件系统与进程管理详解
58 8
|
18天前
|
缓存 资源调度 安全
深入探索Linux操作系统的心脏——内核配置与优化####
本文作为一篇技术性深度解析文章,旨在引领读者踏上一场揭秘Linux内核配置与优化的奇妙之旅。不同于传统的摘要概述,本文将以实战为导向,直接跳入核心内容,探讨如何通过精细调整内核参数来提升系统性能、增强安全性及实现资源高效利用。从基础概念到高级技巧,逐步揭示那些隐藏在命令行背后的强大功能,为系统管理员和高级用户打开一扇通往极致性能与定制化体验的大门。 --- ###
48 9
|
13天前
|
Linux
如何在 Linux 系统中查看进程占用的内存?
如何在 Linux 系统中查看进程占用的内存?
|
17天前
|
消息中间件 安全 算法
深入理解操作系统:进程管理的艺术
【10月更文挑战第38天】在数字世界的心脏,操作系统扮演着至关重要的角色。它不仅是硬件与软件的桥梁,更是维持计算机运行秩序的守夜人。本文将带你走进操作系统的核心——进程管理,探索它是如何协调和优化资源的使用,确保系统的稳定与高效。我们将从进程的基本概念出发,逐步深入到进程调度、同步与通信,最后探讨进程安全的重要性。通过这篇文章,你将获得对操作系统进程管理的全新认识,为你的计算机科学之旅增添一份深刻的理解。
|
17天前
|
缓存 运维 网络协议
深入Linux内核架构:操作系统的核心奥秘
深入Linux内核架构:操作系统的核心奥秘
36 2
|
21天前
|
算法 调度 UED
深入理解操作系统:进程管理与调度策略
【10月更文挑战第34天】本文旨在探讨操作系统中至关重要的一环——进程管理及其调度策略。我们将从基础概念入手,逐步揭示进程的生命周期、状态转换以及调度算法的核心原理。文章将通过浅显易懂的语言和具体实例,引导读者理解操作系统如何高效地管理和调度进程,保证系统资源的合理分配和利用。无论你是初学者还是有一定经验的开发者,这篇文章都能为你提供新的视角和深入的理解。
40 3
|
21天前
|
缓存 网络协议 Linux
Linux操作系统内核
Linux操作系统内核 1、进程管理: 进程调度 进程创建与销毁 进程间通信 2、内存管理: 内存分配与回收 虚拟内存管理 缓存管理 3、驱动管理: 设备驱动程序接口 硬件抽象层 中断处理 4、文件和网络管理: 文件系统管理 网络协议栈 网络安全及防火墙管理
38 4
|
22天前
|
Linux 调度 C语言
深入理解操作系统:进程和线程的管理
【10月更文挑战第32天】本文旨在通过浅显易懂的语言和实际代码示例,带领读者探索操作系统中进程与线程的奥秘。我们将从基础知识出发,逐步深入到它们在操作系统中的实现和管理机制,最终通过实践加深对这一核心概念的理解。无论你是编程新手还是希望复习相关知识的资深开发者,这篇文章都将为你提供有价值的见解。