Linux 进程管理

基础知识

进程

内核的功能和作用:文件系统管理、网络管理、进程管理、内存管理等,属于linux最基础的功能

进程:process,正在运行中的程序的一个副本。允许有多个进程同时执行。

#操作系统负责分配cpu运行进程的顺序和时间

#副本:把磁盘上的指定文件加载到内存进行运行  运行多次就会有多个副本

#多实例:一个程序生成多个副本,每个副本在内存中独立运行

#进程是资源使用的分配单位,进程存在声明周期

#PID:进程的唯一标号

进程创建过程: #进程的父子关系:写实复制
1. 操作系统启动的时候有个总进程(系统的第一个进程):centos6--init  centos7及以上--systemd

2. 后续的所有进程都是总进程生成的,一次推类,构成一个树状结构,c语言使用fork()函数创建子进程

#父进程创建子进程的过程:
父进程在内存中占有一片空间,创建子进程的时候,此时子进程用的内存空间是父进程那一块空间。当子进程产生数据更新以后,就会复制父进程的空间来作为自己独立的空间。

线程

线程:进程是系统资源分配的单位。进程在处理数据的时候,通过线程来完成任务。

#进程相当于一个组织,线程就相当于这个组织里面干活的员工。进程和线程是包含关系,多个线程共享进程的空间。

#线程在运行的时候的执行顺序由操作系统决定

#一颗CPU同时只能执行一件事,他将时间切成很小的时间片,不同的时间片做不同的任务,所以就感觉在同时做多件事情(实际上是轮流执行程序的)。

使用 pstree -p 可以看到系统中的进程和线程。#只有一个线程后面就不显示了(后面没有花括号)。

协程

协程:一个协程就相当于一个函数。

进程、线程、协程的区别:

1.线程是程序执行的最小单位,进程是操作系统分配资源的最小单位;

2.一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线

3.进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间

进程的结构

  • 任务列表
  • PCB

任务列表概念

任务列表:操作系统允许您运行多个进程,这些进程组成一个进程列表(任务列表),所有进程都放在这个列表中。

[En]

Task list: the operating system allows you to run multiple processes, which form a process list (task list), in which all processes are placed.

PCB概念

PCB:存放一个具体进程的全部信息(包括进程编号、状态、优先级等),因为系统有多个进程,所以就存在多个PCB,每个PCB之间通过指针变量关联

页(Page)

页:进程内存资源的分配的最小单位,类似于文件系统的block,页的默认大小也是4k

虚拟地址和物理地址

  • 虚拟地址
  • 物理地址
虚拟地址

虚拟地址:存储相对地址,并更改位置。它还没有修好。

[En]

Virtual address: the relative address is stored, and the location is changed. It’s not fixed.

应用程序看到的是虚拟地址
物理地址

物理地址:特定的固定地址

[En]

Physical address: a specific fixed address

MMU

MMU:内存管理单元(cpu中的硬件芯片),把虚拟地址转换成物理地址。

进程访问某个数据的时候,先把请求发送给操作系统,操作系统再交给cpu,cpu计算为物理地址,然后才能得到真正的数据。
tlb

tlb:缓存虚拟地址和物理地址的区域

内存的分配空间

  • 用户空间:进程虚拟内存空间
    [En]

    user space: process virtual memory space*

  • 内核空间:操作系统使用
    [En]

    kernel space: used by the operating system*

每个进程都包括5种不同的数据段

  • 代码段
  • 数据段
  • BSS段
代码段:存放可执行文件的操作指令数据段:存放初始化了的全局变量BSS段:存放未初始化的全局变量 #Block Started by Symbol”的缩写,意为“以符号开始的块栈:存放临时变量(比如函数里面使用的变量) #先进后出  队列就是先进先出堆:存放数组、对象

进程使用内存问题

  • 内存泄漏
  • 内存溢出
内存泄露: Memory Leak,分配的空间不释放,一直占用着内存溢出:Memory Overflow,程序申请的空间不够用。内存不足:OOM,内存不够用(java中的一种提示)

进程运行的状态

  • 创建
  • 就绪:
  • 执行
  • 终止
  • 阻塞
    Linux 进程管理
使用 ps aux 可以看到进程的状态
进程更多的状态:
运行态:running #正在运行就绪态:ready睡眠态:进程不干活了,可中断:interruptable,不可中断(不能人为打断):uninterruptable停止态:stopped,进程处于暂停的状态僵死态:zombie,僵尸态,结束进程,父进程结束前,子进程不关闭,杀死父进程可以关闭僵死态的子进程(这种进程不占用空间)#结束僵尸态的方法:把它的父进程杀死就没了或者恢复父进程

LRU 算法

LRU:Least Recently Used 近期最少使用算法(喜新厌旧),用来实现内存的充分利用

IPC 进程之间的通信

IPC: Inter Process Communication

通信方法:

  • 同主机
  • 跨主机

同一主机上:

  • 管道
  • 套接字
  • 文件映射
  • 共享内存
  • 信号
管道:cmd1 | cmd2 (管道符的两边就开启了两个进程),单工通信 # | 这属于匿名管道

#命名管道:创建一个管道(pipe)文件,用来实现两个进程之间的通信。 A--->管道文件--->B
#创建管道文件的命令:mkfifo(fifo:先进先出)
#格式: mkfifo pipe_name

套接字:进程之间双向通讯
#查看套接字的方法:find / -type s -ls

文件映射:文件的数据映射到内存的一块空间中,多个进程共享这块内存空间

共享内存:直接在内存中分配一块空间,这块空间大家都能使用。

信号:trap -l 可以查看。发个信号进程收到以后就会按照指定的功能来进行操作。

跨主机通信:

socket:socket就是ip加上端口号。ip地址确定了设备在网络中的位置。端口号确定了设备上了具体应用程序。(使用tcp、udp协议都会分配要给与众不同的独有端口)

范例

范例:利用管道文件实现 IPC

mkfifo /data/test.fifo #创建一个管道文件

ll /data/test.fifo #使用ll查看管道的信息,发现它的大小是0字节,

cat > /data/test.fifo #输入123456
#在管道文件里面写入数据以后,不会自动退出,且此时文件的大小依然是0,以为这个管道文件是在内存里面的,不是在磁盘里面。

#在另一个终端可以从文件中读取数据
cat /data/test.fifo  #会读取到123456
进程的优先级

CentOS优先级:

Linux 进程管理
系统优先级:0-139, 数字越小,优先级越高

实时优先级(realtime): 99-0   值最大优先级最高

nice值(nice优先级):-20到19,对应系统优先级100-139  #一般进程启动以后,优先级使用nice优先级的0

top工具显示的优先级是0-39,对应系统优先级的100-139

设置和调整进程优先级

静态优先级:100-139

进程默认启动时的nice值为0,优先级为120

只有根用户才能降低nice值(提高优先性)

nice命令

以指定的优先级启动进程

[En]

Start the process at the specified priority

nice -n number command

例如:#nice -n -10 ping 127.0.0.1 #调整平命令的优先级为-10

进程分类

操作系统分类:
  • 协作式多任务:
  • 抢占式多任务:
协作式多任务:一个任务得到cpu后,只有它主动放弃cpu,其他进程才能使用

抢占式多任务:CPU的控制权由操作系统控制(由操作系统分配cpu资源)
进程类型
  • 守护进程
  • 前台进程
守护进程:daemon,计算机启动以后就自动运行,就和终端没关系了。

前台进程:跟终端相关,通过终端启动的进程

#二者可以进行转换

进程管理工具

pstree工具:

您可以显示流程之间的父子关系

[En]

You can display the parent-child relationship between processes

#格式:
pstree [选项] [pid|user]  #可以查看指定的进程信息,也可以查看所有的进程关系

#选项:
-p:显示pid

-T:不显示线程

ps工具:

功能:查看进程信息,默认显示当前终端中的进程(显示当前时刻的状态)

[En]

Function: to view the process information and display the processes in the current terminal by default (showing the status of the current moment)

#ps默认显示的是当前终端中用户运行的进程列表。
Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中

#格式:
ps [选项]

#三种选项风格:
UNIX选项 如: -A -e  #单个字母

GNU选项 如: --help  #完整单词

BSD选项 如: a  #只需要一个字母

#常用选项:

a 选项包括所有终端中的进程
u 显示每个进程是以谁的身份运行等信息
x 显示和终端有关或无关的进程(和终端无端:随计算机启动就启动了)
o 属性… 显示指定的属性列 pid、cmd、%cpu、%mem

-e 显示所有进程,相当于-A
-f 显示完整格式程序信息
-p pid 显示指pid的进程
-t ttylist 指定tty,相当于 t

ps命令的输出信息:

C :  ps -ef 显示列 C 表示cpu利用率

VSZ: 操作系统承诺给进程的空间(虚拟内存占用空间)

RSS: 操作系统实际给进程的空间(实际内存占用空间)

TTY:所在的终端,如果是?号表示和终端无关

STAT:进程状态
 R:running #正在运行中的
 S: interruptable sleeping #可中断的睡眠
 D: uninterruptable sleeping #不可中断睡觉
 T: stopped  #停止
 Z: zombie   #僵尸
 +: 前台进程
 l: 多线程进程
 L:内存分页并带锁
 N:低优先级进程
 <: 8 19 高优先级进程 s: session leader,会话(子进程)发起者 i:idle kernel thread,centos 新特性 ni: nice优先级,nice值 #范围-20 --- 对应:100-139 pri: priority 系统优先级数字 #数字越大,优先级越高 rtprio: 实时优先级 #对应系统0-99 psr: processor 显示进程和cpu之间的绑定关系 #进程在那颗cpu上运行 < code></:>

范例

#ps -ef  #unix&#x98CE;&#x683C;
#ps aux #bsd&#x98CE;&#x683C;
&#x8FD9;&#x4E2A;&#x98CE;&#x683C;&#x7684;&#x9009;&#x9879;&#x663E;&#x793A;&#x7684;&#x4FE1;&#x606F;&#x6CA1;&#x6709;aux&#x663E;&#x793A;&#x7684;&#x8981;&#x5168;

##&#x67E5;&#x770B;&#x8FDB;&#x7A0B;&#x7684;&#x7279;&#x5B9A;&#x5C5E;&#x6027;
&#x4F8B;&#x5982;&#xFF1A;#ps axo pid,cmd,%mem,%cpu

#&#x627E;&#x5230;&#x672A;&#x77E5;&#x8FDB;&#x7A0B;&#x7684;&#x6267;&#x884C;&#x7A0B;&#x5E8F;&#x6587;&#x4EF6;&#x8DEF;&#x5F84;
#ps&#x547D;&#x4EE4;&#x663E;&#x793A;&#x7684;&#x53EA;&#x662F;pid&#x548C;&#x7A0B;&#x5E8F;&#x7684;&#x540D;&#x79F0;&#xFF0C;&#x6CA1;&#x6709;&#x663E;&#x793A;&#x7A0B;&#x5E8F;&#x7684;&#x6587;&#x4EF6;&#x8DEF;&#x5F84;
ls -l /proc/1272/exe   #1272&#x8868;&#x793A;&#x8FDB;&#x7A0B;&#x7684;pid  exe&#x662F;&#x4E00;&#x4E2A;&#x8F6F;&#x8FDE;&#x63A5;&#xFF0C;&#x6307;&#x5411;&#x7A0B;&#x5E8F;&#x7684;&#x8DEF;&#x5F84;

#&#x8303;&#x4F8B;&#xFF1A;&#x67E5;&#x770B;&#x4F18;&#x5148;&#x7EA7;&#x548C;CPU&#x7ED1;&#x5B9A;&#x5173;&#x7CFB;
#ps axo pid,cmd,psr |grep &#x8FDB;&#x7A0B;&#x540D;

prtstat工具:

查看进程的信息

#&#x683C;&#x5F0F;
prtstat [&#x9009;&#x9879;] pid
&#x4F8B;&#x5982;&#xFF1A;#prtstat 1026

[root@Centos8 ~]# prtstat 1026
Process: sshd               State: S (sleeping)
  CPU#:  1          TTY: 0:0    Threads: 1
Process, Group and Session IDs
  Process ID: 1026        Parent ID: 1
    Group ID: 1026       Session ID: 1026
  T Group ID: -1

Page Faults
  This Process    (minor major):      718         8
  Child Processes (minor major):    80458        11
CPU Times
  This Process    (user system guest blkio):   0.05   0.06   0.00   0.00
  Child processes (user system guest):        93.69  11.96   0.00
Memory
  Vsize:       94 MB
  RSS:         7856 kB           RSS Limit: 18446744073709 MB
  Code Start:  0x56188adb7000        Code Stop:  0x56188ae83f38
  Stack Start: 0x7fffde7c3120
  Stack Pointer (ESP):          0    Inst Pointer (EIP):          0
Scheduling
  Policy: normal
  Nice:   0          RT Priority: 0 (non RT)

查看某个进程的方法

- ps &#x9009;&#x9879; | grep 'pattern' #&#x67E5;&#x627E;&#x67D0;&#x4E2A;&#x8FDB;&#x7A0B;

- /sbin/pidof &#x6309;&#x786E;&#x5207;&#x7684;&#x7A0B;&#x5E8F;&#x540D;&#x79F0;&#x67E5;&#x770B;pid

- pgrep&#x5DE5;&#x5177;

pgrep

专门的进程过滤工具

&#x547D;&#x4EE4;&#x683C;&#x5F0F;&#xFF1A;
pgrep [options] pattern

&#x9009;&#x9879;&#xFF1A;
-u uid: effective user&#xFF0C;&#x8FDB;&#x7A0B;&#x6240;&#x6709;&#x8005;

-U uid: real user&#xFF0C;&#x771F;&#x6B63;&#x53D1;&#x8D77;&#x8FD0;&#x884C;&#x547D;&#x4EE4;&#x8005;

-t terminal: &#x4E0E;&#x6307;&#x5B9A;&#x7EC8;&#x7AEF;&#x76F8;&#x5173;&#x7684;&#x8FDB;&#x7A0B;

-l: &#x6307;&#x5B9A;&#x8FDB;&#x7A0B;&#x540D; #&#x6839;&#x636E;&#x8FDB;&#x7A0B;&#x540D;&#x663E;&#x793A;&#x8FDB;&#x7A0B;&#x4FE1;&#x606F;

-a: &#x663E;&#x793A;&#x5B8C;&#x6574;&#x683C;&#x5F0F;&#x7684;&#x8FDB;&#x7A0B;&#x540D;

-P pid: &#x663E;&#x793A;&#x6307;&#x5B9A;&#x8FDB;&#x7A0B;&#x7684;&#x5B50;&#x8FDB;&#x7A0B;

pidof

知道程序名,用来获取进程pid。

&#x683C;&#x5F0F;&#xFF1A;pidof process _name

#&#x9009;&#x9879;&#xFF1A;
-x&#xFF1A; &#x67E5;&#x627E;&#x811A;&#x672C;&#x7684;&#x8FDB;&#x7A0B;id #&#x811A;&#x672C;&#x5FC5;&#x987B;shebang&#x673A;&#x5236;&#x5F00;&#x5934;&#xFF0C;&#x4EE5;bash&#x7684;&#x65B9;&#x5F0F;&#x6765;&#x8FD0;&#x884C;&#x627E;&#x4E0D;&#x5230;&#xFF0C;&#x9700;&#x8981;&#x52A0;&#x6743;&#x9650;&#x6765;&#x8FD0;&#x884C;&#x624D;&#x627E;&#x5F97;&#x5230;

uptime

系统负载信息查询

#&#x548C;w&#x547D;&#x4EE4;&#x3001;top&#x547D;&#x4EE4;&#x6700;&#x4E0A;&#x9762;&#x663E;&#x793A;&#x7684;&#x4FE1;&#x606F;&#x4E5F;&#x662F;&#x4E00;&#x6837;&#x7684;&#x3002;

#&#x663E;&#x793A;&#x4FE1;&#x606F;
&#x5F53;&#x524D;&#x65F6;&#x95F4;

&#x7CFB;&#x7EDF;&#x5DF2;&#x542F;&#x52A8;&#x7684;&#x65F6;&#x95F4;

&#x5F53;&#x524D;&#x4E0A;&#x7EBF;&#x4EBA;&#x6570;

&#x7CFB;&#x7EDF;&#x5E73;&#x5747;&#x8D1F;&#x8F7D;&#xFF08;1&#x3001;5&#x3001;15&#x5206;&#x949F;&#x7684;&#x5E73;&#x5747;&#x8D1F;&#x8F7D;&#xFF0C;&#x4E00;&#x822C;&#x4E0D;&#x4F1A;&#x8D85;&#x8FC7;1&#xFF0C;&#x8D85;&#x8FC7;5&#x65F6;&#x5EFA;&#x8BAE;&#x8B66;&#x62A5;&#xFF09;

实时进程的查看:

  • htop工具
  • top工具
top工具

动态实时查看进程信息

#&#x9009;&#x9879;&#xFF1A;
-d # &#x6307;&#x5B9A;&#x5237;&#x65B0;&#x65F6;&#x95F4;&#x95F4;&#x9694;&#xFF0C;&#x9ED8;&#x8BA4;&#x4E3A;3&#x79D2;
-b &#x5168;&#x90E8;&#x663E;&#x793A;&#x6240;&#x6709;&#x8FDB;&#x7A0B;
-n # &#x5237;&#x65B0;&#x591A;&#x5C11;&#x6B21;&#x540E;&#x9000;&#x51FA;
-H &#xA0; &#x7EBF;&#x7A0B;&#x6A21;&#x5F0F;

#top&#x547D;&#x4EE4;&#x663E;&#x793A;&#x7684;&#x4FE1;&#x606F;
us&#xFF1A;&#x7528;&#x6237;&#x7A7A;&#x95F4;
sy&#xFF1A;&#x5185;&#x6838;&#x7A7A;&#x95F4;
ni&#xFF1A;&#x8C03;&#x6574;nice&#x65F6;&#x95F4;
id&#xFF1A;&#x7A7A;&#x95F2;
wa&#xFF1A;&#x7B49;&#x5F85;IO&#x65F6;&#x95F4;
hi&#xFF1A;&#x786C;&#x4E2D;&#x65AD;
si&#xFF1A;&#x8F6F;&#x4E2D;&#x65AD;&#xFF08;&#x6A21;&#x5F0F;&#x5207;&#x6362;&#xFF09;
st&#xFF1A;&#x865A;&#x62DF;&#x673A;&#x5077;&#x8D70;&#x7684;&#x65F6;&#x95F4;

htop工具

top工具的增强版。

#&#x9009;&#x9879;&#xFF1B;
-d #: &#x6307;&#x5B9A;&#x5EF6;&#x8FDF;&#x65F6;&#x95F4;&#xFF1B;
-u UserName: &#x4EC5;&#x663E;&#x793A;&#x6307;&#x5B9A;&#x7528;&#x6237;&#x7684;&#x8FDB;&#x7A0B;
-s COLUME: &#x4EE5;&#x6307;&#x5B9A;&#x5B57;&#x6BB5;&#x8FDB;&#x884C;&#x6392;&#x5E8F;
#&#x5B50;&#x547D;&#x4EE4;
s&#xFF1A;&#x8DDF;&#x8E2A;&#x9009;&#x5B9A;&#x8FDB;&#x7A0B;&#x7684;&#x7CFB;&#x7EDF;&#x8C03;&#x7528;
l&#xFF1A;&#x663E;&#x793A;&#x9009;&#x5B9A;&#x8FDB;&#x7A0B;&#x6253;&#x5F00;&#x7684;&#x6587;&#x4EF6;&#x5217;&#x8868;
a&#xFF1A;&#x5C06;&#x9009;&#x5B9A;&#x7684;&#x8FDB;&#x7A0B;&#x7ED1;&#x5B9A;&#x81F3;&#x67D0;&#x6307;&#x5B9A;CPU&#x6838;&#x5FC3;
t&#xFF1A;&#x663E;&#x793A;&#x8FDB;&#x7A0B;&#x6811;

CPU相关信息显示:mpstat工具

&#x6765;&#x6E90;&#xFF1A;sysstat&#x5305;

&#x663E;&#x793A;&#x4FE1;&#x606F;&#x8BF4;&#x660E;&#xFF1A;
CPU&#xFF1A;
%usr&#xFF1A;&#x7528;&#x6237;&#x7A7A;&#x95F4;&#x5360;&#x7528;&#x65F6;&#x95F4;
%nice&#xFF1A;nice&#x4F18;&#x5148;&#x7EA7;
%sys&#xFF1A;&#x7CFB;&#x7EDF;&#x5185;&#x6838;&#x5360;&#x7528;&#x65F6;&#x95F4;
%iowait&#xFF1A;io&#x7B49;&#x5F85;
%irq&#xFF1A;&#x4E2D;&#x65AD;
%soft&#xFF1A;&#x8F6F;&#x4E2D;&#x65AD;
%steal&#xFF1A;&#x88AB;&#x865A;&#x62DF;&#x673A;&#x8FD0;&#x884C;&#x5360;&#x7528;&#x7684;&#x65F6;&#x95F4;
%guest&#xFF1A;&#x548C;&#x865A;&#x62DF;&#x5316;&#x6709;&#x5173;&#x7684;
%gnice&#xFF1A;&#x865A;&#x62DF;&#x673A;&#x8C03;&#x6574;&#x4F18;&#x5148;&#x7EA7;
%idle&#xFF1A;&#x7A7A;&#x95F2;&#x7684;&#x65F6;&#x95F4;

 PID&#xFF08;&#x8FDB;&#x7A0B;id&#xFF09;
 USER&#xFF08;&#x8FDB;&#x7A0B;&#x53D1;&#x8D77;&#x8005;&#xFF09;
 PR&#xFF08;top&#x91CC;&#x9762;&#x7684;&#x4F18;&#x5148;&#x7EA7;&#xFF09;
 NI(nice&#x4F18;&#x5148;&#x7EA7;)
 VIRT&#xFF08;&#x865A;&#x62DF;&#x5185;&#x5B58;&#x7A7A;&#x95F4;&#xFF09;
 RES&#xFF08;&#x5B9E;&#x9645;&#x5185;&#x5B58;&#x5360;&#x7528;&#x7A7A;&#x95F4;&#xFF09;
 SHR&#xFF08;&#x5171;&#x4EAB;&#x5185;&#x5B58;&#x5360;&#x7528;&#x7A7A;&#x95F4;&#xFF09;
 S&#xFF08;&#x8FDB;&#x7A0B;&#x72B6;&#x6001;&#xFF09;
 %CPU&#xFF08;cpu&#x5229;&#x7528;&#x7387;&#xFF09;
 %MEM&#xFF08;&#x5185;&#x5B58;&#xFF09;
 TIME+&#xFF08;&#x603B;&#x7684;&#x8FD0;&#x884C;&#x65F6;&#x95F4;&#xFF09;
 COMMAND&#xFF08;&#x5BF9;&#x5E94;&#x7684;&#x547D;&#x4EE4;&#xFF09;

内存相关信息查看

free 可以显示内存空间使用状态

&#x9009;&#x9879;&#xFF1A;
-b &#x4EE5;&#x5B57;&#x8282;&#x4E3A;&#x5355;&#x4F4D;

-m &#x4EE5;MB&#x4E3A;&#x5355;&#x4F4D;

-g &#x4EE5;GB&#x4E3A;&#x5355;&#x4F4D;

-h &#x6613;&#x8BFB;&#x683C;&#x5F0F;

-o &#x4E0D;&#x663E;&#x793A;-/+buffers/cache&#x884C;

-t &#xA0; &#x663E;&#x793A;RAM + swap&#x7684;&#x603B;&#x548C;

-s n &#x5237;&#x65B0;&#x95F4;&#x9694;&#x4E3A;n&#x79D2;

-c n &#x5237;&#x65B0;n&#x6B21;&#x540E;&#x5373;&#x9000;&#x51FA;

缓存的清理方法

&#x5411;/proc/sys/vm/drop_caches&#x4E2D;&#x5199;&#x5165;&#x76F8;&#x5E94;&#x7684;&#x4FEE;&#x6539;&#x503C;&#xFF0C;&#x4F1A;&#x6E05;&#x7406;&#x7F13;&#x5B58;
&#x6267;&#x884C;echo
1&#x3001;2&#x3001;3 &#x81F3; /proc/sys/vm/drop_caches, &#x8FBE;&#x5230;&#x4E0D;&#x540C;&#x7684;&#x6E05;&#x7406;&#x76EE;&#x7684;

查看进程打开文件 lsof

lsof:list open files,列出正在打开的文件。

#&#x9009;&#x9879;&#xFF1A;
-a&#xFF1A;&#x5217;&#x51FA;&#x6253;&#x5F00;&#x6587;&#x4EF6;&#x5B58;&#x5728;&#x7684;&#x8FDB;&#x7A0B;
-c<进程名>&#xFF1A;&#x5217;&#x51FA;&#x6307;&#x5B9A;&#x8FDB;&#x7A0B;&#x6240;&#x6253;&#x5F00;&#x7684;&#x6587;&#x4EF6;
-g&#xFF1A;&#x5217;&#x51FA;GID&#x53F7;&#x8FDB;&#x7A0B;&#x8BE6;&#x60C5;
-d<文件号>&#xFF1A;&#x5217;&#x51FA;&#x5360;&#x7528;&#x8BE5;&#x6587;&#x4EF6;&#x53F7;&#x7684;&#x8FDB;&#x7A0B;
+d<目录>&#xFF1A;&#x5217;&#x51FA;&#x76EE;&#x5F55;&#x4E0B;&#x88AB;&#x6253;&#x5F00;&#x7684;&#x6587;&#x4EF6;
+D<目录>&#xFF1A;&#x9012;&#x5F52;&#x5217;&#x51FA;&#x76EE;&#x5F55;&#x4E0B;&#x88AB;&#x6253;&#x5F00;&#x7684;&#x6587;&#x4EF6;
-n<目录>&#xFF1A;&#x5217;&#x51FA;&#x4F7F;&#x7528;NFS&#x7684;&#x6587;&#x4EF6;
-i<条件>&#xFF1A;&#x5217;&#x51FA;&#x7B26;&#x5408;&#x6761;&#x4EF6;&#x7684;&#x8FDB;&#x7A0B;(4&#x3001;6&#x3001;&#x534F;&#x8BAE;&#x3001;:&#x7AEF;&#x53E3;&#x3001; @ip )
-p<进程号>&#xFF1A;&#x5217;&#x51FA;&#x6307;&#x5B9A;&#x8FDB;&#x7A0B;&#x53F7;&#x6240;&#x6253;&#x5F00;&#x7684;&#x6587;&#x4EF6;
-u&#xFF1A;&#x5217;&#x51FA;UID&#x53F7;&#x8FDB;&#x7A0B;&#x8BE6;&#x60C5;
-h&#xFF1A;&#x663E;&#x793A;&#x5E2E;&#x52A9;&#x4FE1;&#x606F;
-v&#xFF1A;&#x663E;&#x793A;&#x7248;&#x672C;&#x4FE1;&#x606F;&#x3002;
-n: &#x4E0D;&#x53CD;&#x5411;&#x89E3;&#x6790;&#x7F51;&#x7EDC;&#x540D;&#x5B57;

</进程号></条件></目录></目录></目录></文件号></进程名>

范例

&#x67E5;&#x770B;&#x67D0;&#x4E2A;&#x7AEF;&#x53E3;&#x662F;&#x90A3;&#x4E2A;&#x8FDB;&#x7A0B;&#x5728;&#x4F7F;&#x7528;

#&#x67E5;&#x770B;&#x6240;&#x6709;&#x6B63;&#x5728;&#x6253;&#x5F00;&#x7684;&#x6587;&#x4EF6;&#xFF1A;
lsof

#&#x627E;&#x56DE;&#x88AB;&#x8BEF;&#x5220;&#x9664;&#x7684;&#x6587;&#x4EF6;  &#x524D;&#x63D0;&#x662F;&#x8FD9;&#x4E2A;&#x6587;&#x4EF6;&#x6709;&#x4EBA;&#x5728;&#x8BBF;&#x95EE;
1. lsof | grep delete #&#x8FC7;&#x6EE4;&#x51FA;&#x88AB;&#x5220;&#x9664;&#x7684;&#x6587;&#x4EF6;&#xFF0C;&#x627E;&#x5230;&#x6B63;&#x5728;&#x8BBF;&#x95EE;&#x8FD9;&#x4E2A;&#x6587;&#x4EF6;&#x7684;&#x8FDB;&#x7A0B;&#x7F16;&#x53F7;

2. ll /proc/pid/fd #fd:&#x6587;&#x4EF6;&#x63CF;&#x8FF0;&#x7B26;

3. cat /proc/pid/fd/&#x6587;&#x4EF6;&#x63CF;&#x8FF0;&#x7B26; > &#x5BFC;&#x51FA;&#x4E3A;&#x65B0;&#x6587;&#x4EF6;

信号的管理

kill工具

它用于向进程发送控制信号以管理进程。每个信号对应一个数字,信号名称为

[En]

It is used to send control signals to the process to manage the process. Each signal corresponds to a number, and the signal name is

SIG开头(可省略),不区分大小写

#&#x663E;&#x793A;&#x5F53;&#x524D;&#x53EF;&#x7528;&#x7684;&#x4FE1;&#x53F7;&#xFF1A;
trap -l

kill -l

#&#x5E38;&#x7528;&#x4FE1;&#x53F7;&#xFF1A;
1) SIGHUP &#x65E0;&#x987B;&#x5173;&#x95ED;&#x8FDB;&#x7A0B;&#x800C;&#x91CD;&#x65B0;&#x52A0;&#x8F7D;&#x914D;&#x7F6E;&#x6587;&#x4EF6;

2) SIGINT &#x4E2D;&#x6B62;&#x6B63;&#x5728;&#x8FD0;&#x884C;&#x7684;&#x8FDB;&#x7A0B;&#xFF1B;&#x76F8;&#x5F53;&#x4E8E;Ctrl+c

3) SIGQUIT &#x76F8;&#x5F53;&#x4E8E;ctrl+\ #&#x9000;&#x51FA;&#x8FDB;&#x7A0B;

9) SIGKILL &#x5F3A;&#x884C;&#x5173;&#x95ED;&#x67D0;&#x4E2A;&#x8FDB;&#x7A0B;,&#x53EF;&#x80FD;&#x4F1A;&#x5BFC;&#x81F4;&#x6570;&#x636E;&#x4E22;&#x5931;&#xFF08;&#x76F8;&#x5F53;&#x4E8E;&#x6309;&#x7535;&#x6E90;&#x5173;&#x673A;&#xFF09;

15) SIGTERM  &#x6B63;&#x5E38;&#x5173;&#x95ED;&#x67D0;&#x4E2A;&#x8FDB;&#x7A0B;&#xFF0C;&#x9ED8;&#x8BA4;&#x4FE1;&#x53F7;

18) SIGCONT &#x7EE7;&#x7EED;&#x8FD0;&#x884C;

19) SIGSTOP &#x540E;&#x53F0;&#x4F11;&#x7720;

#&#x4FE1;&#x53F7;&#x7684;&#x63CF;&#x8FF0;&#x65B9;&#x6CD5;
&#x6570;&#x5B57;&#x6CD5;&#xFF1A;1, 2, 9

&#x5168;&#x79F0;&#xFF1A;SIGHUP&#xFF0C;sighup

&#x7B80;&#x79F0; &#x53BB;&#x6389;&#x5F00;&#x5934;&#x7684;SIG&#xFF0C;HUP&#xFF0C;hup

#&#x5411;&#x8FDB;&#x7A0B;&#x53D1;&#x9001;&#x4FE1;&#x53F7;
&#x901A;&#x8FC7;pid&#x7684;&#x65B9;&#x5F0F;&#xFF1A;
kill [-s sigspec | -n signum | -sigspec] pid
#-s sigspec:&#x6307;&#x5B9A;&#x5B8C;&#x6574;&#x7684;&#x4FE1;&#x53F7;&#x540D;
#-n signum&#xFF1A;&#x4FE1;&#x53F7;&#x7684;&#x6570;&#x5B57;&#x8868;&#x793A;&#x6CD5;
#-sigspec&#xFF1A;&#x4FE1;&#x53F7;&#x7684;&#x7B80;&#x5199;&#x65B9;&#x6CD5;

#&#x6839;&#x636E;&#x7A0B;&#x5E8F;&#x540D;&#x53D1;&#x9001;&#x4FE1;&#x53F7;
killall &#x7A0B;&#x5E8F;&#x540D;&#x79F0;

#0&#x4FE1;&#x53F7;
&#x4FE1;&#x53F7;&#x4E3A;0&#xFF0C;&#x6CA1;&#x6709;&#x53D1;&#x9001;&#x4EFB;&#x4F55;&#x4FE1;&#x53F7;&#xFF0C;&#x4EC5;&#x4EC5;&#x68C0;&#x67E5;&#x8FDB;&#x7A0B;&#x662F;&#x5426;&#x6B63;&#x5E38;&#x5DE5;&#x4F5C;&#x3002;
&#x683C;&#x5F0F;&#xFF1A; killall -0 &#x7A0B;&#x5E8F;&#x540D;

&#x4F8B;&#x5982;&#xFF1A;
[root@centos8 ~]#killall -0 ping
[root@centos8 ~]#echo $?  ---> 0

作业管理

  • 前台运行管理
  • 后台运行管理

前台运行管理:

前台:依托终端,在终端上运行,开机后占用终端,不能在该终端上进行其他操作。

[En]

Front desk: rely on a terminal, run on a terminal, and occupy the terminal after startup, so no other operations can be done in this terminal.

例如: ping 127.0.0.1

后台运行管理

子体:不占用终端资源,流程执行时添加&符号

[En]

Descendants: do not occupy terminal resources, add a & symbol when the process is executed

&#x4F8B;&#x5982;&#xFF1A;ping 127.0.0.1 &

前后台运行的切换

默认情况下,大多数命令都在前台执行,可以切换前台和后台。

[En]

By default, most commands are executed in the foreground, and the foreground and background can be switched.

CTRL+C&#x5C31;&#x662F;&#x7ED9;&#x524D;&#x53F0;&#x6267;&#x884C;&#x7684;&#x7A0B;&#x5E8F;&#x53D1;&#x9001;&#x7EC8;&#x6B62;&#x4FE1;&#x53F7;&#xFF0C;&#x5FEB;&#x6377;&#x952E;&#x652F;&#x961F;&#x524D;&#x53F0;&#x6267;&#x884C;&#x7684;&#x751F;&#x6548;&#x3002;&#x5BF9;&#x540E;&#x53F0;&#x6267;&#x884C;&#x7684;&#x7A0B;&#x5E8F;&#x65E0;&#x6548;&#x3002;&#x9700;&#x8981;&#x4F7F;&#x7528;kill&#x547D;&#x4EE4;&#x6765;&#x53D1;&#x9001;&#x4FE1;&#x53F7;

前–后台切换方法:

CTRL+Z&#x5FEB;&#x6377;&#x952E; --- &#x628A;&#x524D;&#x53F0;&#x7A0B;&#x5E8F;&#x653E;&#x5230;&#x540E;&#x53F0;&#xFF08;&#x653E;&#x5230;&#x540E;&#x53F0;&#x4EE5;&#x540E;&#x7A0B;&#x5E8F;&#x5C31;&#x4E0D;&#x8FD0;&#x884C;&#x4E86;&#xFF09;&#xFF0C;&#x901A;&#x8FC7;bg &#x4F5C;&#x4E1A;&#x7F16;&#x53F7; --&#x628A;&#x540E;&#x53F0;&#x505C;&#x6B62;&#x7684;&#x4F5C;&#x4E1A;&#x6062;&#x590D;&#x6210;&#x540E;&#x53F0;&#x8FD0;&#x884C;&#x6001;
&#x4F5C;&#x4E1A;&#x7F16;&#x53F7;&#x7684;&#x67E5;&#x8BE2;&#xFF1A;jobs&#x547D;&#x4EE4;
&#x6216;&#x8005; kill -18 %&#x4F5C;&#x4E1A;&#x7F16;&#x53F7;

后台运行–>后台停止:

发送19信号: kill -19 %作业编号 作业编号:jobs命令

后–前切换方法;

fg 作业编号

Linux 进程管理

后台执行的作用:

前台执行按顺序执行,后台执行可以并行执行。

[En]

Foreground execution is executed in sequence, while background execution can be executed in parallel.

&#x540E;&#x53F0;&#x6267;&#x884C;&#x7684;&#x4EFB;&#x52A1;&#x5728;&#x7EC8;&#x7AEF;&#x5173;&#x95ED;&#x4EE5;&#x540E;&#x4E5F;&#x4F1A;&#x968F;&#x4E4B;&#x5173;&#x95ED;&#x3002;

实现窗口关闭还继续执行的方法;

&#x65B9;&#x6CD5;&#x4E00;&#xFF1A;screen&#x547D;&#x4EE4;
&#x7A0B;&#x5E8F;&#x6267;&#x884C;&#x4E4B;&#x524D;&#x5F00;&#x542F;screen&#xFF1A;&#x683C;&#x5F0F;&#xFF1A;screen
&#x7136;&#x540E;&#x518D;&#x8F93;&#x5165;&#x8981;&#x6267;&#x884C;&#x7684;&#x547D;&#x4EE4;

&#x65B9;&#x6CD5;&#x4E8C;&#xFF1A;nohup&#x547D;&#x4EE4;
&#x683C;&#x5F0F;&#xFF1A;nohhup &#x8981;&#x6267;&#x884C;&#x7684;&#x7A0B;&#x5E8F; -- &#x4F1A;&#x6709;&#x8F93;&#x51FA;&#x7684;&#x4FE1;&#x606F;

并行执行的实现:

并行执行:让多个进程同时执行

[En]

Parallel execution: let multiple processes execute simultaneously

&#x65B9;&#x6CD5;&#x4E00;&#xFF1A;&#x628A;&#x4ED6;&#x4EEC;&#x90FD;&#x653E;&#x5230;&#x540E;&#x53F0;&#x53BB;&#x6267;&#x884C;

&#x65B9;&#x6CD5;&#x4E8C;&#xFF1A;(f1.sh&);(f2.sh&);(f3.sh&) --&#x5C0F;&#x62EC;&#x53F7;&#x62EC;&#x8D77;&#x6765;&#xFF0C;&#x5206;&#x53F7;&#x9694;&#x5F00;

&#x65B9;&#x6CD5;&#x4E09;&#xFF1A;f1.sh&f2.sh&f3.sh&

范例:扫描ip地址

net=10.0.0
for i in {1..254};do
 &#xA0; {
 &#xA0; &#xA0;if ping -c1 -W1 $net.$i &> /dev/null;then
 &#xA0; &#xA0; &#xA0; &#xA0;echo $net.$i is up
 &#xA0; &#xA0;else
 &#xA0; &#xA0; &#xA0; &#xA0;echo $net.$i is down
 &#xA0; &#xA0;fi
 &#xA0; }&  #&#x82E5;&#x91CC;&#x9762;&#x6709;&#x591A;&#x4E2A;&#x547D;&#x4EE4;&#xFF0C;&#x5C31;&#x7528;&#x82B1;&#x62EC;&#x53F7;&#x5C31;&#x662F;&#x628A;&#x5B83;&#x4F5C;&#x4E3A;&#x4E00;&#x4E2A;&#x6574;&#x4F53;
done
wait  #&#x540E;&#x53F0;&#x6267;&#x884C;&#x7684;&#x8FDB;&#x7A0B;&#x7ED3;&#x675F;&#x4E4B;&#x540E;&#xFF0C;&#x4E3B;&#x52A8;&#x9000;&#x51FA;

Original: https://www.cnblogs.com/heyongshen/p/16480050.html
Author: 背对背依靠
Title: Linux 进程管理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/523102/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球