/ _* Y2 C: N6 Y D X" c1 H5 R/ X 如果想要让上面例子中的任务转为后台执行,就使用“& ”。不过,由于是后台执行的,所以该程序的输出并不会出现在屏幕上。当用户将数个任务放到后台任务执行时,要如何去管理这些后台任务?怎么知道后台任务的执行情况?如何终止或暂时停止后台任务的执行?下面就来逐一说明。 7 L7 ^( h! s0 R2 Z+ T a: W
( _( D i( G0 n. B <B>控制管理</B> 2 h4 ^2 J A" B3 a: s4 l6 W. N* q* J% u9 f0 t4 N
举例如下: $ h3 @% [& Z: T0 e2 C6 ]) C* ~
9 _/ f7 l q1 m) j
# du -a /user > user.data & : \. S3 N% B5 @# U- }1 P% V4 i' _! p3 Z. B q5 d; W ]
[1] 237 ) f6 Z2 Y: ~+ L8 \4 Z
8 a$ w3 N! p& x # find / -name core -type f -ls > core.data & % [; Z5 X) n" M# t* w) g: Q
; d) |7 `. d9 d! N/ b6 X+ |
[2] 238 " N- b8 _ u1 [$ H& P6 j. `) ?' u$ Z, z9 f' Z
- X9 z+ E g' W
7 Z8 m0 v4 V7 z 如上通过“&”命令将三个任务放到后台中执行。用命令“jobs -l”显示后台任务的执行情况,举例如下: " w9 V' j$ M6 c% Y
8 ~ a& }3 q/ K4 G& O! R
#jobs -l & O' W3 x$ E1 v+ c! h! Z) x $ T5 G$ n/ u( c8 y& r [1] + 237 Running du -a /user > user.data 7 ^; a% L5 H" Z. Y , z4 _1 Z5 n% H [2] - 238 Running find / -name core -type f -ls > core.data & A* e7 n6 a% E# l- t" S% W+ ?
; N# @ s+ [/ @& N$ ~9 a* M 首先介绍一个任务控制特有的名词:当前任务。上面的当前任务是“du -a /user > user.data”,因为后台任务号码是“[1]”。如果当第一个后台任务顺利执行完毕,第二个后台任务还在执行中时,当前任务便会自动变成后台任务号码“[2]”的后台任务。所以可以得出一点,即当前任务是会变动的。当用户输入“fg”、“bg”和“stop”等命令时,如果不加任何引号,则所变动的均是当前任务。 / {# e) j- E" @ / E$ Z& |9 H' l& L l! k3 C <B>终止后台任务</B> 7 v2 u- v: d7 q# @8 }! L
% w, b2 l$ [4 U K- s 命令总是有出错的时候。当出现这种情况时,用户可用Shell的内置命令“kill”来结束任务。假如想要结束后台任务“du -a /user > user.data”,可以用下面的命令: 3 |9 o) b- n+ f9 ~& ~( @- ?/ r' q( D# n/ \' o
# kill 237 " V7 u8 c0 Q8 I$ M& B( U. Q
5 y) `+ l* {3 O- }+ F/ s
# kill %1 / J2 ?& S/ L7 u
! w g6 g3 s1 u! o' } 其中,237为第一个后台任务的PID号码。如果想终止第二个后台任务,以下两种方法均可: + f* C0 w- q! O3 z- t$ ?) \( a! x8 X8 {+ s7 p9 L) U5 u
方法一:#kill %2 " r0 o v E; M9 ~
8 }3 m, t, L( T4 v' s7 l
方法二:# kill %- 3 `, o2 L8 d( a- m ! @7 a: N* q) ^/ c# r* ?) H <B>执行暂停任务</B> 4 A8 x/ f" ~9 g( M
3 ?( D2 N$ F. H) W3 z V Shell的内置命令“stop”可用来暂停后台任务。示例如下: " a! A" S$ T" r