#!/bin/bash
# 文件名 test.sh
for i in $(seq 1 10)
do
#echo $i
sleep 1
done
直接运行
直接运行程序,会占用命令行界面,程序终止时才能,继续使用命令行界面
sh test.sh
后台运行
加上&
符号,后台运行,会返回[1] 27227
,[1]
是指作业号,每个终端命令行都会给自己的进程分配一个作业号,27227
是进程.
此时,我们可以在终端继续执行其他命令.
当程序运行完,我们输入enter
时,会显示该作业的执行情况.
sh test.sh &
~/code/test$ sh test.sh &
[1] 27227
~/code/test$ # 输入回车后会看到执行结果
[1]+ Done sh test.sh
重定向输出
虽然在后台运行,但是标准输出还会输出到终端
#!/bin/bash
# 文件名 test.sh
for i in $(seq 1 10)
do
echo $i
sleep 1
done
sh test.sh &
~/code/test$ sh test.sh &
[1] 27426
~/code/test$ 1
2
3
4
5
6
7
8
9
10
[1]+ Done sh test.sh
~/code/test$
所以需要将标准输出和标准错误,重定向到文件
sh test.sh > log 2>&1 &
脱离控制台nohub
nohup
阻断发给进程的SIGHUP
信号,既在退出终端时阻止其下进程的退出
nohup sh test.sh &
因为nohup
会解除终端与进程的关联,所以进程也就不会和STDOUT
STDERR
联系起来.而输出内容会默认保存在nohup.out
文件里.
~/code/test$ nohup sh test.sh &
[1] 27500
~/code/test$ nohup: ignoring input and appending output to 'nohup.out'
最好手动指定从定向的文件.
~/code/test$ nohup sh test.sh >log 2>&1 &