在本章中,我们将详细讨论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.
通常,当子进程被终止时,父进程将通过 SIGCHLD 信号进行更新.然后,父母可以根据需要执行其他任务或重新启动新子项.但是,有时父进程在其子进程被杀之前被终止.在这种情况下,"所有进程的父进程" init 进程成为新的PPID(父进程ID).在某些情况下,这些过程称为孤立过程.
当一个进程被终止时, ps 列表仍然可以显示带有 Z
守护程序是系统相关的后台进程,通常与来自其他进程的root和服务请求的权限.
守护进程没有控制终端.它无法打开/dev/tty .如果您执行"ps -ef"并查看 tty 字段,则所有守护程序将 tty <的?/b>.
准确地说,守护进程是一个在后台运行的进程,通常等待它能够使用的某些事情发生.例如,打印机守护程序等待打印命令.
如果你有一个程序需要冗长的处理,那么值得让它成为守护进程并在后台运行它.
top 命令是一个非常有用的工具,可以快速显示按各种条件排序的进程.
它是一种交互式诊断工具,可以经常更新并显示有关物理和虚拟内存,CPU使用率,平均负载和忙碌过程的信息.
这是运行top命令的简单语法,并查看不同进程的CPU利用率统计信息 :
$ top
后台和暂停的进程通常通过作业号(作业ID)进行操作.此数字与进程ID不同,因为它更短,所以使用它.
此外,作业可以包含多个并行运行的进程.使用作业ID比跟踪单个流程更容易.