Unix / Linux-进程管理

在本章中,我们将详细讨论Unix中的进程管理。在Unix系统上执行程序时,系统会为该程序创建一个特殊的环境。此环境包含系统运行程序所需的一切,就像系统上没有其他程序在运行一样。

每当您在Unix中发出命令时,它都会创建或启动一个新进程。尝试使用ls命令列出目录内容时,您开始了一个进程。简而言之,进程是正在运行的程序的实例。

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

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

开始一个进程

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

  • 前台处理
  • 后台进程

前台处理

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

您可以通过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命令想要任何输入(不需要),它将从键盘等待它。

当程序在前台运行且非常耗时时,无法运行其他命令(启动任何其他进程),因为在程序完成处理并显示出来之前,提示将不可用。

后台进程

后台进程在没有连接到键盘的情况下运行。如果后台进程需要任何键盘输入,它将等待。

在后台运行进程的优点是您可以运行其他命令。您不必等到它完成就可以开始另一个!

启动后台进程的最简单方法是在命令末尾添加“&”号

$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命令想要任何输入(不需要),它将进入停止状态,直到我们将其移至前台并从键盘提供数据。

第一行包含有关后台进程的信息-作业号和进程ID。您需要知道作业号才能在后台和前台之间进行操作。

按Enter键,您将看到以下内容-

[1]   +   Done                 ls ch*.doc &
$

第一行告诉您ls命令后台进程成功完成。第二个是提示另一个命令。

列出正在运行的进程

通过运行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(f表示完整)选项,它提供了更多信息,如以下示例所示-

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

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

序号列和说明
1UID
该进程所属的用户标识(运行它的人)
2PID
进程ID
3PPID
父进程ID(启动它的进程的ID)
4C
进程的CPU利用率
5STIME
流程开始时间
6TTY
与流程关联的终端类型
7TIME
进程占用的CPU时间
8CMD
启动此进程的命令

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

序号选项和说明
1-a
显示有关所有用户的信息
2-x
显示有关无终端的进程的信息
3-u
显示其他信息,例如-f选项
4-e
显示扩展信息

停止流程

结束进程可以用几种不同的方式完成。通常,从基于控制台的命令中发送CTRL + C击键(默认中断字符)将退出命令。当进程在前台模式下运行时,此方法有效。

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

$ps -f
UID      PID  PPID C STIME    TTY   TIME CMD
amrood   6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood   6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood   3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood   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。

僵尸和孤儿进程

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

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

守护进程

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

守护程序没有控制终端。它无法打开/ dev / tty。如果执行“ ps -ef”并查看tty字段,则所有守护程序都将带有一个tty

确切地说,守护程序是在后台运行的进程,通常等待它能够处理的事情发生。例如,打印机守护程序正在等待打印命令。

如果您有一个需要长时间处理的程序,那么值得将其设为守护程序并在后台运行。

top命令

top命令是用于快速示出由各种标准排序处理的非常有用的工具。

它是一个交互式诊断工具,会经常更新并显示有关物理和虚拟内存,CPU使用率,平均负载以及繁忙进程的信息。

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

$top

作业ID与流程ID

后台进程和挂起的进程通常通过作业号(作业ID)进行操作。此数字与进程ID不同,因为它更短而使用。

另外,一个作业可以由多个并行或并行运行的进程组成。使用作业ID比跟踪单个流程更容易。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁