[转载] 后台进程符的使用 [文摘]
生活随笔
收集整理的這篇文章主要介紹了
[转载] 后台进程符的使用 [文摘]
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原文地址:&?后臺進程符的使用?[文摘]作者:Biot& 后臺運行命令. 一個命令后邊跟一個& 表示在后臺運行.讓我們通過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
? 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
?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]
[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
? 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
?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]
轉載于:https://www.cnblogs.com/liuzhuqing/archive/2011/10/27/7481005.html
總結
以上是生活随笔為你收集整理的[转载] 后台进程符的使用 [文摘]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文本信息检索基本知识【转】
- 下一篇: (转)MySQL 服务器内存使用