Unix和Linux进程管理操作和使用原理介绍

上一章Unix和Linux教程请查看:Unix和Linux管道和过滤器使用
在本章中我们将详细讨论Unix中的进程管理。当你在Unix系统上执行一个程序时,系统会为该程序创建一个特殊的环境,这个环境包含系统运行程序所需的一切,就好像系统上没有其他程序在运行一样。
无论何时在Unix中发出命令,它都会创建或启动一个新进程。尝试使用ls命令列出目录内容时启动了一个进程。简单地说进程是正在运行的程序的实例,操作系统通过称为pid或进程ID的五位数ID来跟踪进程,系统中的每个进程都有一个惟一的pid。
pid最终会重复,因为所有可能的数字都用完了,下一个pid会滚动或重新开始。在任何时候系统中都不存在两个具有相同pid的进程,因为Unix使用pid来跟踪每个进程。
一、开启一个进程当你启动一个进程(运行一个命令)时,有两种方法可以运行它:

  • 前台进程
  • 后台进程
1、前台进程
默认情况下我们启动的每个进程都在前台运行,它从键盘获取输入并将输出发送到屏幕,使用ls命令可以看到这种情况。如果希望列出当前目录中的所有文件,可以使用以下命令:
$ls ch*.xml

这将显示所有文件:其名称以ch开头以.xml结尾
进程在前台运行而输出被定向到我的屏幕,如果ls命令需要任何输入(它不需要),它将从键盘等待输入。
虽然程序在前台运行而且很耗时,但是不能运行其他命令(启动任何其他进程),因为提示符在程序完成处理并发出之前是不可用的。
2、后台进程
后台进程在没有连接到键盘的情况下运行。如果后台进程需要任何键盘输入它会等待。在后台运行进程的好处是可以运行其他命令:你不必等到它完成后再启动另一个,启动后台进程的最简单方法是在命令末尾添加& 。
$ls ch*.xml &

在这里如果ls命令需要任何输入(它不需要),它将进入停止状态,直到我们将它移到前台,并将键盘上的数据提供给它。第一行包含关于后台进程的信息——作业编号和进程ID。
你需要知道任务编号,以便在后台和前台之间操作它。按下回车键你会看到以下画面:
[1]+Donels ch*.xml & $

第一行告诉你ls命令后台进程成功完成,第二个是另一个命令的提示符。
二、查看正在运行的进程运行ps(进程状态)命令很容易看到您自己的进程如下所示:
$ps PIDTTYTIMECMD 1974 pts/1300:00:00 bash 2415 pts/1300:00:00 ps

ps最常用的标志之一是-f (f for full)选项,它提供了更多信息,如下面的示例所示:
$ ps -f UIDPIDPPIDC STIME TTYTIME CMD user197419730 16:24 pts/1300:00:00 -bash user241619740 17:22 pts/1300:00:00 ps -f

下面是ps -f命令显示的所有字段的描述:
编号 字段 & 描述
1 UID 这个进程所属的用户ID(运行它的用户)
2 PID 进程ID
3 PPID 父进程ID(启动它的进程的ID)
4 C 进程的CPU利用率
5 STIME 进程开始时间
6 TTY 与进程关联的终端类型
7 TIME 进程占用的CPU时间
8 CMD 启动此进程的命令
还有其他选项可以与ps命令一起使用:
编号 选项 & 描述
1 -a 显示所有用户的信息
2 -x 显示没有终端的进程的信息
3 -u 显示附加信息,如-f选项
4 -e 显示扩展信息
三、停止进程结束一个过程有几种不同的方法。通常从基于控制台的命令中发送CTRL + C击键(默认的中断字符)将退出该命令,当进程在前台模式下运行时这种方法有效。
如果一个进程在后台运行,你应该使用ps命令获取它的进程ID,然后你可以使用kill命令来终止进程如下所示:
$ ps -f UIDPIDPPIDC STIME TTYTIME CMD user197419730 16:24 pts/1300:00:00 -bash user241719740 17:28 pts/1300:00:00 ps -f $ kill 1974 Terminated

另外如果一个进程忽略了一个常规的kill命令,你可以使用kill -9后跟进程ID。
四、父进程和子进程每个unix进程都有两个分配给它的ID号:程ID (pid)和父进程ID (ppid)。系统中的每个用户进程都有一个父进程。
你运行的大多数命令都将shell作为它们的父命令,可以查看ps -f示例该命令列出了进程ID和父进程ID。
五、僵死进程和孤立进程通常当子进程被杀死时,父进程通过SIGCHLD信号进行更新。然后父进程可以执行其他任务,或者根据需要重新启动新的子进程。然而有时父进程在它的子进程被杀死之前就被杀死了。
在本例中“所有进程的父进程”(init进程)成为新的PPID(父进程ID)。在某些情况下这些进程被称为孤立进程。当一个进程被杀死时,ps列表仍然可以显示进程的Z状态。这是一个僵死的进程:进程已死而且不能使用,这些过程与孤立过程不同,他们已经完成了执行,但是仍然在进程表中找到了一个条目。
六、守护程序守护进程是与系统相关的后台进程,它通常使用根进程的权限和来自其他进程的服务请求来运行。守护进程没有控制终端,它无法打开/dev/tty。如果执行“ps -ef”并查看tty字段,所有守护进程对于tty都将有一个?。
确切地说守护进程是在后台运行的进程,通常等待它能够处理的事情发生。例如等待打印命令的打印机守护进程。如果你有一个需要长时间处理的程序,那么有必要让它成为一个守护进程并在后台运行它。
七、top命令上面的命令top命令是一个非常有用的工具,用于快速显示根据各种标准排序的进程。它是一个交互式诊断工具,经常更新并显示有关物理和虚拟内存、CPU使用情况、平均负载和繁忙进程的信息。运行top命令和查看不同进程的CPU使用率统计数据的简单语法:$top。
八、作业ID与进程ID【Unix和Linux进程管理操作和使用原理介绍】后台进程和挂起进程通常通过作业编号(作业ID)进行操作。这个数字与进程ID不同,使用它是因为它更短。此外作业可以由多个进程组成,这些进程可以连续运行,也可以同时并行运行,使用作业ID比跟踪单个进程更容易。

    推荐阅读