后台运行
在shell脚本中当我们需要把一个任务放在后台运行时,通常我们会使用&符号
1 | subcommand & |
此时主进程会继续往下执行,而子命令会在后台启动运行
于此同时,我们常会看到nohup
会和后台任务一起使用,格式是:
1 | nohup subcommand & |
nohup
nohup起两个作用:
- 正如名字所声称的,忽略所有发送给子命令的挂断(SIGHUP)信号
- 重定向子命令的标准输出(stdout)和标准错误(stderr) 。subcommand的标准输出和标准错误被重定向到
nohup.out
文件;如果没有使用nohup方式,则subcommand的标准输出和标准错误是复用父进程的标准输出和标准错误。
wait命令
wait
命令可以使当前shell
进程挂起,等待所指定的由当前shell
产生的子进程退出后,wait
命令才返回。wait
命令的参数可以是进程ID
或是job
1 | wait [-n] [jobspec or pid …] |
wait命令的参数可以是进程ID或是job specification。举例如下:
1
2
3
4
5
6
7
8
9root# sleep 10 &
[3] 876
root# wait 876
[3]+ Done sleep 10
root# sleep 20 &
[1] 877
root# wait %1
[1]+ Done sleep 20
在
Bash shell
脚本中启动多个后台进程(使用&
),然后调用wait
命令,等待所有后台进程都运行完毕,Bash shell
脚本再继续向下执行1
2
3command1 &
command2 &
wait
sleep命令
1 | sleep [--help] [--version] number[smhd] |
- –help : 显示辅助讯息
- –version : 显示版本编号
- number : 时间长度,后面可接 s、m、h 或 d
- 其中 s 为秒,m 为 分钟,h 为小时,d 为日数