linux shell命令之作业控制

作业控制

内建命令fg可以将后台作业放到前台,&符号使后台作业放到前台运行

cat sleep10.sh
#!/bin/bash

sleep 10

执行: ./sleep10.sh & #后台执行
[1] 44819 #作业号和进程号
fg #将[1]号作业放到前台运行
./sleep10.sh

当有多个后台进程时,可以通过fg %作业号的方式,将指定的作业
放到前台运行
./sleep55.sh &
[1] 44839

./sleep10.sh &
[2] 44841

fg %2
./sleep10.sh

下面演示jobs命令
./sleep55.sh &
[1] 45312
./sleep55.sh &
[2] 45314
./sleep10.sh &
[3] 45316

jobs
[1] Running ./sleep55.sh &
[2]- Running ./sleep55.sh &
[3]+ Running ./sleep10.sh &

jobs -l
[1] 45312 Running ./sleep55.sh &
[2]- 45314 Running ./sleep55.sh &
[3]+ 45316 Running ./sleep10.sh &

vi sleep10.sh 按Ctrl+Z
jobs
[1] Running ./sleep55.sh &
[2]- Running ./sleep55.sh &
[4]+ Stopped vi sleep10.sh

再输入fg,可以将命令vi sleep10.sh回置到前台

bg命令可以使阻塞的作业转到后台运行
./sleep55.sh
^Z #按下ctrl+z组合键,将该作业阻塞
[1]+ Stopped ./sleep55.sh
bg #作业转入后台运行
[1]+ ./sleep55.sh &

fg bg, jobs命令只能以作业号为参数来指定作业,这三个命令是不能使用进程号的
kill disown wait命令既能以作业号指定作业,也可以用进程号指定作业。

vi input &
[1] 45497

[1]+ Stopped vi input

vi loggg &
[2] 45498

[2]+ Stopped vi loggg

jobs
[1]- Stopped vi input
[2]+ Stopped vi loggg
disown %-
bash: warning: deleting stopped job 1 with process group 45497
jobs
[2]+ Stopped vi loggg
disown 45498
bash: warning: deleting stopped job 2 with process group 45498

jobs

cat backls.sh
#!/bin/bash

ls /etc | grep "rc[0-9]" & #列出/etc目录下以rc开头,紧跟数字的文件
echo "The Script quits now"

wait

./backls.sh
The Script quits now
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
如上,有wait时,直到等到上述执行完后,脚本才退出

./backls.sh
The Script quits now
root@ubuntu:/home/cheng/test_program# rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
如上,没有wait时,脚本退出后,还在执行后台的命令

posted @ 2021-04-02 15:17  zhudaheng123  阅读(241)  评论(0)    收藏  举报