Linux作为一个多任务环境,允许用户同时执行多项任务,例如查看系统情况、备份资料、编辑文件和打印文件等。 7 S; E, Y" N y: A4 j4 c+ X2 i' @ ]. {: w8 {5 T
对于耗时长的任务不应该让它在前台任务中执行,而应该交给后台任务去执行。这样前台任务可继续正常运作其它的操作,不用等待。示例如下: 5 X) Y; g3 X7 v% m; ~: Y
# }) Y" J* i1 A0 e. g. @
# find / -name testing & " Y* Z K6 Q1 F# g
" |9 s Q% n: R1 @2 ? # fg , K+ `! H6 J# S9 n4 @; c1 ^+ ^; ]. C. ?4 \
如果想要让上面例子中的任务转为后台执行,就使用“& ”。不过,由于是后台执行的,所以该程序的输出并不会出现在屏幕上。当用户将数个任务放到后台任务执行时,要如何去管理这些后台任务?怎么知道后台任务的执行情况?如何终止或暂时停止后台任务的执行?下面就来逐一说明。 5 S' @: o F! ?+ F0 F, z & c4 d0 X0 O8 B6 V" u! S <B>控制管理</B> 4 o7 W' K K$ w+ r; `8 k( {; z- w
举例如下: ) b2 I, Q1 u* B R3 V; x7 y
( s: @6 H3 q1 ~; ?0 @ # du -a /user > user.data & $ V+ @) G* Y% N) T+ Q5 U
" y) k& F& }. T
[1] 237 4 Y1 L' \/ K, r& ^7 k
6 G3 a5 M7 h$ r% S6 ? # find / -name core -type f -ls > core.data & 1 `, _- k$ M1 b. K, j6 k K0 G 7 J P& v1 x) R( ` [2] 238 8 h+ r. W( x! G9 v , e7 x! [! K4 d! N# u 0 x9 j( H5 g0 J0 N; O" T5 @0 S% ]! {1 P; e3 t; M
如上通过“&”命令将三个任务放到后台中执行。用命令“jobs -l”显示后台任务的执行情况,举例如下: 5 }+ B: n( G3 i+ w0 k. G9 h: Q + j+ y& G) @4 u- A2 Z #jobs -l ( J2 _4 ]$ D( R. s% y8 a" i
, b) w. A) Z0 ^( _5 r
[1] + 237 Running du -a /user > user.data 4 o# M9 J2 I- r5 {/ I i! F9 q" W6 h {; n" {
[2] - 238 Running find / -name core -type f -ls > core.data : B: r* q( o1 m& [0 G- Y0 y% N- B
4 j" y7 X+ u6 K3 }# ?
首先介绍一个任务控制特有的名词:当前任务。上面的当前任务是“du -a /user > user.data”,因为后台任务号码是“[1]”。如果当第一个后台任务顺利执行完毕,第二个后台任务还在执行中时,当前任务便会自动变成后台任务号码“[2]”的后台任务。所以可以得出一点,即当前任务是会变动的。当用户输入“fg”、“bg”和“stop”等命令时,如果不加任何引号,则所变动的均是当前任务。 5 C, ?, _) Q9 G & q$ {3 h5 a" u' F5 |! q <B>终止后台任务</B> ; x* T) G0 A) ], V( l( Q4 P3 w/ @. `7 A5 x$ G/ M7 y5 a% d
命令总是有出错的时候。当出现这种情况时,用户可用Shell的内置命令“kill”来结束任务。假如想要结束后台任务“du -a /user > user.data”,可以用下面的命令: . o; F: S( s( h5 K: C
5 `+ [- m# D/ H- w
# kill 237 ) [* F. n2 f" Z3 j" ?: R: S
" ]* e/ _* m: ^: A1 O4 ~9 y% U # kill %1 % f. r( \' x5 p9 s2 F