Linux Shell学习笔记四

第6学时 进程

6.1 启动一个进程

在UNIX中无论何时执行一个命令,它都创建或启动一个新进程。

例如:当使用ls命令列一个目录内容时,就启动一个进程。

 

操作系统使用一个叫做pid或进程ID的5位数字ID来跟踪进程。系统中每个进程都有一个唯一的pid。

pid最终可能重复是因为所有可能的数字都被用完,所以下一个pid又从头开始。

在任何时刻,系统中没有两个相同的pid进程,因为pid是UNIX用来跟踪每个进程的。

 

6.1.1.前台进程

缺省下,用户启动的每个进程都在前台运行。进程从键盘得到输入并把输出送到屏幕上。

在运行命令时,不能运行其他命令(启动任何其他进程)。这时可以输入命令,但由于UNIX键盘输入缓冲区的原因,

直到前面命令执行完后才会显示出来。

UNIX提供一些措施来在后台启动进程、悬挂前台进程和在前台和后台之间移动进程。

 

6.1.2 后台进程

一个后台进程运行时不必与键盘连接。如果后台进程要求键盘输入,则进行等待。

在后台运行一个进程的优点是用户可以运行其他命令,用户不需要等待一个进程完成再启动另一个。

 

启动一个后台进程最简单的方式是在命令的后面增加一个&符号

例如:$ ls cho*.doc &

 

要求输入的后台进程

如果用户运行一个要求输入的后台进程,而且没有把它重定向为用读文件来代替键盘输入,则进程停止。

如果用户把进程和任务监测置为可用,则在一个空命令提示符后按Enter或启动一个命令时会返回一个信息。

 

1.把一个前台进程移动到后台

除了使用&在后台运行一个进程外,用户还可以把一个前台进程移动到后台。

一个前台进程运行时,Shell不处理任何新命令。用户在输入新命令前,必须悬挂前台进程得到一个提示符。

 

当前台进程被悬挂时,有一个命令提示符可以让用户输入其他命令,原来的进程仍在内存中,但不占用CPU时间。

要恢复前台进程有两个选择---后台和前台。

bg命令使用户能把悬挂进程置到后台;fg命令则可以把进程返回到前台。

使用CTRL+Z,停止一个进程。bg恢复一个进程。

 

2.把一个后台移动到前台

当有一个进程在后台或是悬挂,用户可以使用fg命令把它移动到前他。

缺省下,最后一个被悬挂或移动到后台的进程将被移到前台。

 

3。使后台进程保持继续运行(nohup命令)

当退出系统或连接意外中断时,用户可以防止一个后台进程终止。nohup命令可以防止用户的进程受到HUP信号,从而进程可以

只需将nohup放在运行命令的前面即可。

由于nohup被设计为无终端时运行,所以它希望用户把输出重定向到一个文件中。如果不这样做,nohup自动重定向到一个

叫做nohup.out中。

 

4.等待后台进程结束(wait命令)

在做其他事情前等待一个进程结束有两种方法。用户可以隔几分钟按一下enter,直到得到一个完成的信息。或使用wait命令

使用wait有三种方式--无选项、使用进程ID、使用加%号前缀的任务标号

例如:$ wait %1

这时不能输入其他命令,直到任务结束。

 

6.2 列出正在运行的进程

用户可以在前台或后台启动一个进程,悬挂他们,并在前台和后台之间移动,但怎么才能知道正在运行的是哪些进程呢?

可以使用jbos或ps命令;

6.2.1 ps命令

在缺省情况下,它显示正在运行的进程。它还可以接受许多不同选项。

对每个正在运行的进程,它提供四条信息:pid、TTY(进程运行的终端)、进程消耗的CPU时间、以及运行的命令名。

ps中-f选项是最长用的,它提供更多的信息

信息列表如下:

列名 描述

UID 进程所属用户ID

PID 进程ID

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

C 进程使用CPU时间

STIME 进程开始时间

CMD 启动该进程的命令

 

6.3 杀死一个进程(kill命令)

$ kill %1

%1表示任务号

用户可以使用进程ID而不是加%的任务标号来杀死一个特定进程。要使用进程ID来杀死进程,可以使用命令:

$ kill 6639  #(PID号)

 

6.4 父进程和子进程

在上面$ ps -f例子中,每个进程被赋予两个ID:进程ID(pid)和父进程ID(ppid)。系统中的每个用户进程都有一个父进程。

用户运行的大部分命令把Shell当作父进程。

Shell的父进程通常是操作系统或终端通信进程。

 

6.4.1 任务ID和进程ID

后台进程和悬挂进程通常由任务标号操作,这个数字与进程ID不同,它是因为较短才被使用。

 

6.4.2 SubShells

当用户运行Shell脚本时,除了脚本中的任何命令外,还创建了另一个Shell解释器的拷贝。

新Shell被称为一个SubShells,就像一个目录包含在另一个目录下时成为子目录一样。

例如:shell脚本文件psit

#! /bin/ksh

ps -ef | grep root

exit 0

当运行时,psit的返回结果是:

$ psit

root 9830 3662 0 22:57:00 pts/6 0:00 ksh psit

root 9831 9830 0 22:57:01 pts/6 0:00 ps -ef

root 9832 9830 0 22:57:01 pts/6 0:00 grep root

root 3662 3657 0 22:57:01 pts/6 0:00 -ksh

从上看出,当运行psit此脚本文件时,会生成一个父进程 ksh psit,其中执行的命令都将成为其子进程。

你可能感兴趣的:(linux,unix,shell,脚本,kill,任务)