shell脚本里使用&后台运行标志

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
badboych22
帖子: 200
注册时间: 2007-09-11 15:15

shell脚本里使用&后台运行标志

#1

帖子 badboych22 » 2010-08-23 16:43

1 #!/bin/bash
2 #background-loop.sh
3
4 for i in 1 2 3 4 5 6 7 8 9 10 #第一个循环
5 do
6 echo -n "$i"
7 done& #在后台运行这个循环
8 #在第2个循环之后,将在某些时候执行.
9
10 echo #这个'echo'某些时候将不会显示.
11
12 for i in 11 12 13 14 15 16 17 18 19 20 #第二个循环
13 do
14 echo -n "$i"
15 done

大家看一下这个脚本,每次运行的结果都是不同的,想请教一下&在脚本里的作用。
正常的情况下&是后台运行程序。但在脚本里有点不一样啊。
poet
帖子: 2841
注册时间: 2006-09-11 22:47

Re: shell脚本里使用&后台运行标志

#2

帖子 poet » 2010-08-23 18:30

你这个脚本执行结果很正常。

& 的含义并不是“后台执行”,而是 fork。

fork 之后,主进程运行 & 后面的内容,而子进程运行 & 前面的内容。

特别的,当 & 后面的内容为空时,主进程退出了,仅仅有子进程在运行,看起来实现了“后台运行”的效果。

但是就你这个脚本而言, & 的后面还有那么多代码呢。。。所以后面那段代码就是主进程,& 前面的所有代码就成了子进程
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: shell脚本里使用&后台运行标志

#3

帖子 aerofox » 2010-08-23 18:36

脚本里也是在后台运行。
如果不是在脚本里,在输入后一条命令时,前面放到后台中执行的命令已经执行完了。
如果在脚本里,则有可能导致两条命令的输出互相交错,因为这两条命令是“同步”执行的结果。
头像
ptptptptptpt
帖子: 3711
注册时间: 2006-09-19 18:16

Re: shell脚本里使用&后台运行标志

#4

帖子 ptptptptptpt » 2010-11-03 10:09

The Bash & (ampersand) is a builtin control operator used to fork processes. From the Bash man page, "If a command is terminated by the control operator &, the shell executes the command in the background in a subshell".

If logged into an interactive shell, the process is assigned a job number and the child PID is displayed. The job number below is one.

代码: 全选

bash$ sleep 30 &
[1] 3586
Note that when a process is forked, the child PID is stored in the special variable $!

代码: 全选

bash$ echo $!
3586
You can terminate the job by its job number like so:

代码: 全选

bash$ jobs
[1]+ Running sleep 30 &
bash$ kill %1
[1]+ Terminated sleep 30
bash$
照此文的说法,& 只对前面的一条命令(a command)起效,而不是 “& 前面的所有代码” 。我的理解,整个 if ... fi 和 for ... done 代码块被当成一条命令。

跟 C 里的 fork 还是很不同的。
头像
trigger
帖子: 1604
注册时间: 2006-10-25 18:08

Re: shell脚本里使用&后台运行标志

#5

帖子 trigger » 2010-11-03 10:52

#!/bin/bash
#background-loop.sh
for i in {0..9}
do
echo -n "$i"
done&
echo
for i in {A..Z}
do
echo -n "$i"
done
这办法生成字串不错
楼主真是一派胡言,真可谓:“两个黄鹂鸣翠柳,不知所云;一行白鹭上青天,不知所止“。本来不想和你辩论,今天气愤不过,和你理论一番。我国宪法写得清清楚楚:“一夜夫妻百日恩,七楼以上才有电梯”。这个想必你知道,既然知道,你就不能断章取义,就算是天气预报,它还有不准的时候呢!!!再者说了,那中国银行也不是你一家开的。人家马拉多纳都结婚了,你还拿着粮票顶什么用呢。真是滑天下之大稽。前些日子,全国人大刚刚开过会,郑重声明:“中国不搞多party制,存栏母猪给补贴”。多好的事呢,楞让你这号人给搅混了。
回复