nohup与&其实都可以让一个任务在后台运行,区别在于nohup方式可以让子任务忽略sighup信号,也就是父进程退出后不会终止子进程。
具体区别可以看这篇:https://www.jianshu.com/p/747e0d5021a2
用法二者大同小异,取决于是否加nohup。
nohup cmd [args] &
t.sh:
#!/usr/bin/env bash
echo $1
i=1;
for((i=1;i<=1000;i++));
do
echo $i
sleep 1
done
运行:
20:26 yaoli@liyao03-Mac /Users/yaoli/Project/shell
% nohup ./t.sh ly &
[1] 19351
20:28 yaoli@liyao03-Mac /Users/yaoli/Project/shell
% appending output to nohup.out
grep:
20:28 yaoli@liyao03-Mac /Users/yaoli/Project/shell
% ps -ef | grep t.sh
501 19351 19169 0 8:28下午 ttys001 0:00.08 bash ./t.sh ly
说明已经运行。
nohup.out:
ly
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
没粘完