Linux - 进程管理

Linux - 进程管理 首页 / Linux入门教程 / Linux - 进程管理

每当我们在Unix中发出命令时,它都会创建或启动一个新进程,比如使用 ls 命令列出目录内容时,系统就启动了一个进程。

操作系统通过称为 pid 或进程ID 的五位数ID号跟踪进程,系统中的每个进程都有唯一的 pid 。

由于所有可能的数字都用完,下一个pid滚动或重新开始,因此pid最终会重复。在任何时间点,系统中都不存在两个具有相同pid的进程,因为它是Unix用来跟踪每个进程的pid。

开始进程

当启动一个进程(运行命令)时,有两种方法可以运行它-

  • 前台进程(Foreground Processes)
  • 后台进程(Background Processes)

前台进程

默认情况下,您启动的每个进程都在前台运行,它从键盘获取输入并将其输出发送到屏幕。

您可以通过 ls 命令看到这种情况。如果您希望列出当前目录中的所有文件,则可以使用以下命令-

$ls ch*.doc

这将显示所有文件,其文件名以 ch 开头,以 .doc 结尾-

ch01-1.doc   ch010.doc  ch02.doc    ch03-2.doc 
ch04-1.doc   ch040.doc  ch05.doc    ch06-2.doc
ch01-2.doc   ch02-1.doc

后台进程

在后台运行进程的优点是您可以运行其他命令,启动后台进程的最简单方法是在命令末尾添加“&"号。

$ls ch*.doc &

这将显示所有名称以 ch 开头并以 .doc 结尾的文件-

ch01-1.doc   ch010.doc  ch02.doc    ch03-2.doc 
ch04-1.doc   ch040.doc  ch05.doc    ch06-2.doc
ch01-2.doc   ch02-1.doc

列出运行进程

通过运行 ps (进程状态)命令,很容易查看自己的进程,如下所示:

$ps
PID       TTY      TIME        CMD
18358     ttyp3    00:00:00    sh
18361     ttyp3    00:01:31    abiword
18789     ttyp3    00:00:00    ps

ps的最常用标志之一是 -f 选项,它提供了更多信息,如以下示例所示-

$ps -f
UID      PID  PPID C STIME    TTY   TIME CMD
learnfk   6738 3662 0 10:23:03 pts/6 0:00 first_one
learnfk   6739 3662 0 10:22:54 pts/6 0:00 second_one
learnfk   3662 3657 0 08:10:53 pts/6 0:00 -ksh
learnfk   6892 3662 4 10:51:50 pts/6 0:00 ps -f

这是 ps -f 命令显示的所有字段的描述-

Sr.No.Column & 描述
1

UID

该进程所属的用户标识(运行它的人)

2

PID

进程ID

3

PPID

父进程ID(启动它的进程的ID)

4

C

进程的CPU利用率

无涯教程网

5

STIME

进程开始时间

6

TTY

与进程关联的终端类型

7

TIME

进程占用的CPU时间

8

CMD

启动此进程的命令

还有其他选项可以与 ps 命令一起使用-

Sr.No.Option & 描述
1

-a

显示有关所有用户的信息

2

-x

显示有关无终端的进程的信息

3

-u

显示其他信息,如-f选项

4

-e

显示扩展信息

停止进程

结束进程可以用几种不同的方式完成,通常,从基于控制台的命令中发送CTRL + C击键将退出该命令。 

如果某个进程在后台运行,则应使用 ps 命令获取其Job ID。之后,您可以使用 kill 命令杀死进程,如下所示:

$ps -f
UID      PID  PPID C STIME    TTY   TIME CMD
learnfk   6738 3662 0 10:23:03 pts/6 0:00 first_one
learnfk   6739 3662 0 10:22:54 pts/6 0:00 second_one
learnfk   3662 3657 0 08:10:53 pts/6 0:00 -ksh
learnfk   6892 3662 4 10:51:50 pts/6 0:00 ps -f
$kill 6738
Terminated

在这里, kill 命令终止 first_one 进程。如果某个进程忽略了常规的kill命令,则可以使用 kill -9 ,后跟进程ID,如下所示-

$kill -9 6738
Terminated

父/子进程

每个unix进程都有两个分配给它的ID号:进程ID(pid)和父进程ID(ppid),系统中的每个用户进程都有一个父进程。

您运行的大多数命令都将Shell作为其父级。检查 ps -f  示例,其中此命令同时列出了进程ID和父进程ID。

僵尸进程

通常,当子进程被杀死(kill)时,父进程会通过 SIGCHLD 信号进行更新。然后,父进程可以执行其他任务或根据需要重新启动新的子进程。有时父进程会在其子进程被杀死之前被杀死。在这种情况下,所有进程的父进程 init 进程将成为新的PPID,这些进程称为孤立进程。

当进程被杀死时, ps 列表仍可能显示具有 Z 状态,这是一个僵尸或不存在的进程,这些进程不同于孤立进程,他们已完成执行。

守护进程

守护程序是与系统相关的后台进程,通常在具有其他进程的root权限下运行。

守护程序没有控制终端。它无法打开/dev/tty 。如果您执行" ps -ef" 并查看 tty 字段,则所有守护程序将为 tty 。

准确地说,守护程序是在后台运行的进程,如果有需要长时间处理的程序,则推荐将其设为守护程序并在后台运行。

Top命令

top 命令是一个非常有用的工具,用于快速按各种排序显示进程,它实时显示有关物理和虚拟内存,CPU使用率,平均负载和繁忙进程的信息。

这是运行top命令并查看不同进程的CPU使用率统计信息的简单语法-

$top

Processes: 406 total, 3 running, 403 sleeping, 2857 threads                                       17:55:28

Load Avg: 1.85, 2.17, 2.24  CPU usage: 12.99% user, 9.36% sys, 77.63% idle

SharedLibs: 342M resident, 109M data, 43M linkedit.

MemRegions: 212785 total, 4455M resident, 121M private, 1780M shared.

PhysMem: 15G used (1733M wired), 322M unused.

VM: 141T vsize, 2965M framework vsize, 3860201(0) swapins, 4421841(0) swapouts.

Networks: packets: 44966238/34G in, 47274990/18G out. Disks: 33328935/726G read, 35275382/875G written.


PID    COMMAND      %CPU TIME     #TH   #WQ  #PORTS  MEM    PURG   CMPRS  PGRP  PPID  STATE

141*   WindowServer 40.5 19:07:26 23    6    5429+   1203M- 6816K+ 519M   141   1     sleeping

438*   Terminal     33.8 31:01.20 13/1  5    613+    330M+  8928K+ 1093M- 438   1     running

163*   HBuilderX    16.5 68:14.36 67    9    612-    601M+  0B     1785M- 163   1     sleeping

0*     kernel_task  15.5 09:18:56 468/9 0    0       8000K+ 0B     0B     0     0     running

2407*  WizNote Help 12.8 05:51:18 18    1    361     647M   0B     1720M- 471   471   sl

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

消息队列高手课 -〔李玥〕

检索技术核心20讲 -〔陈东〕

etcd实战课 -〔唐聪〕

流程型组织15讲 -〔蒋伟良〕

自动化测试高手课 -〔柳胜〕

超级访谈:对话毕玄 -〔毕玄〕

Vue 3 企业级项目实战课 -〔杨文坚〕

结构思考力 · 透过结构看表达 -〔李忠秋〕

PPT设计进阶 · 从基础操作到高级创意 -〔李金宝(Bobbie)〕

好记忆不如烂笔头。留下您的足迹吧 :)