Unix / Linux - 进程管理

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

每当您在Unix中发出命令时,它都会创建或启动一个新的处理.当您尝试 ls 命令列出目录内容时,您启动了一个过程.简单来说,一个流程就是正在运行的程序的一个实例.

操作系统通过一个名为 pid 的五位数ID跟踪流程或进程ID .系统中的每个进程都有一个唯一的 pid .

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

启动进程

启动流程(运行命令)时,有两种方法可以运行它&减去;

  • 前景流程

  • 后台流程

前台流程

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

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

$ ls ch * .doc

这将显示所有文件,其名称以 ch 开头,以 .doc &minus结尾;

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 命令想要任何输入(它没有),它会从键盘等待它.

虽然程序是在前台运行并且非常耗时,不能运行任何其他命令(启动任何其他进程),因为在程序完成处理并且出现之前提示将不可用.

背景进程

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

在后台运行进程的好处是你可以运行其他命令;你不必等到它完成才能开始另一个!

开始后台处理的最简单方法是在一个&符号上添加&符号(& )结束命令.

 $ ls ch * .doc&

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

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 显示的所有字段的说明命令 :

Sr.No.列&描述
1

UID

此进程所属的用户ID(运行它的人)

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 option

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.

Zombie和Orphan进程

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

当一个进程被终止时, ps 列表仍然可以显示带有 Z

守护程序进程

守护程序是系统相关的后台进程,通常与来自其他进程的root和服务请求的权限.

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

准确地说,守护进程是一个在后台运行的进程,通常等待它能够使用的某些事情发生.例如,打印机守护程序等待打印命令.

如果你有一个程序需要冗长的处理,那么值得让它成为守护进程并在后台运行它.

top命令

top 命令是一个非常有用的工具,可以快速显示按各种条件排序的进程.

它是一种交互式诊断工具,可以经常更新并显示有关物理和虚拟内存,CPU使用率,平均负载和忙碌过程的信息.

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

$ top

作业ID与进程ID

后台和暂停的进程通常通过作业号(作业ID)进行操作.此数字与进程ID不同,因为它更短,所以使用它.

此外,作业可以包含多个并行运行的进程.使用作业ID比跟踪单个流程更容易.