今天看大名鼎鼎的abs,看到里面说在命令后面加&符号即可表示该命令后台执行。
如 sleep 10 & 在命令行的运行结果是
[1]7039 #(7039)是进程号
于是按照书中举例编写如下脚本:
#!/bin/sh
for i in 1 2 3 4 5 6 7 8 9 10
do
echo -n "$i "
done & #据说此处可以使上述循环后台执行
echo
for i in 11 12 13 14 15 16 17 18 19
do
echo -n "$i "
done
echo
上述脚本预期运行结果为 上述数字可能随机排列 即 并不一定按照顺序输出,因为第一个循环为后台执行。
但运行后发现 结果仍然按照顺序输出。
分析原因:
开始考虑#!/bin/sh的问题,可能是shell版本不对,于是查看当前shell
(此处记一下查看shell的命令
1、echo $SHELL
2、echo $0 ---并不是所有版本都支持
3、env | grep SHELL
4 、先ps查看进程,然后在进程中查看是何shell)
然后分析可能是循环较短,导致无法观察效果,于是将循环扩大,但仍然无用
最后将脚本循环中的&符号去掉,改为在第一个循环后加入sleep 10&
预期结果:
假设不加& 那么第一个循环执行完之后,进程将会休眠10秒,然后再执行第二个循环。
如果加上& 则休眠变成后台执行,两个循环连续输出
运行脚本,符合预期,验证成功。
但仍然不知道,为何将&放在循环后面不能够使循环后台执行。很是费解。