zoukankan      html  css  js  c++  java
  • [转载]& 后台进程符的使用 [文摘]

    & 后台运行命令. 一个命令后边跟一个& 表示在后台运行.让我们通过3个例子来初步了解这个命令。
     
    Example 1:
     
    bash$ sleep 10 &
    [1] 850
    [1]+  Done                    sleep 10
     
    Example 2 (在后台运行一个循环):
     
      1 #!/bin/bash
      2 # background-loop.sh
      3
      4 for i in 1 2 3 4 5 6 7 8 9 10            # 第一个循环.
      5 do
       echo -n "$i "
      7 done & # 在后台运行这个循环.
            # 在第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
     16
     17 echo   # 这个'echo'某些时候将不会显示.
     18
     19 # ======================================================
     20
     21 # 期望的输出应该是:
     22 # 1 2 3 4 5 6 7 8 9 10
     23 # 11 12 13 14 15 16 17 18 19 20
     24
     25 # 然而实际的结果有可能是:
     26 # 11 12 13 14 15 16 17 18 19 20
     27 # 1 2 3 4 5 6 7 8 9 10 bozo $
     28 # (第2个'echo'没执行, 为什么?)
     29
     30 # 也可能是:
     31 # 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
     32 # (第1个'echo'没执行, 为什么?)
     33
     34 # 非常少见的执行结果, 也有可能是:
     35 # 11 12 13 1 2 3 4 5 6 7 8 9 10 14 15 16 17 18 19 20
     36 # 前台的循环先于后台的执行.
     37
     38 exit 0
     39
     40 #  Nasimuddin Ansari 建议加一句 sleep 1
     41 #+ 在6行和14行的 echo -n "$i" 之后加这句.
     42 #+ 为了真正的乐趣.
     
    Example 3:
     
    在一个脚本内后台运行一个命令,有可能造成这个脚本的挂起,等待一个按键(Enter)的响应. 看起来只有在这个命令的结果需要输出到stdout的时候, 这种现象才会出现. 这是个很烦人的现象.幸运的是, 我们有针对这个问题的解决办法.
     
    1)
      1 #!/bin/bash
      2 # test.sh        
      3
      4 ls -l &
      5 echo "Done."
    bash$ ./test.sh
    Done.
     [bozo@localhost test-scripts]$ total 1
     -rwxr-xr-x    1 bozo     bozo           34 Oct 11 15:09 test.sh
     _
           
    2)
      1 #!/bin/bash
      2 # test.sh        
      3
      4 ls -l &
      5 echo "Done."
      6 wait
    bash$ ./test.sh
    Done.
     [bozo@localhost test-scripts]$ total 1
     -rwxr-xr-x    1 bozo     bozo           34 Oct 11 15:09 test.sh
     
    看起来只要在后台运行命令的后边加上一个wait命令就会解决这个问题.
    如果将后台运行命令的输出重定向到文件中或/dev/null中, 也能解决这个问题.
     
    [文摘摘自: 高级Bash脚本编程指南-3.9.1_cn]
  • 相关阅读:
    P1587 [NOI2016]循环之美 杜教筛
    【学习笔记】省选动态规划类型选讲
    【模板】结构体重载高精度
    SP1716 GSS3
    SP1043 GSS1
    P1890 gcd区间 线段树
    【模板】(最小费用)最大流
    【模板】矩阵乘法
    P1073 最优贸易 DFS
    【2019.8.14】2019QB学堂DP图论班第一次考试 Problem C
  • 原文地址:https://www.cnblogs.com/liuzhuqing/p/7481006.html
Copyright © 2011-2022 走看看