1. 程式人生 > >shell 的多進程

shell 的多進程

cti 獲取 後臺 amp don sleep file 執行 shell

例子

#!/bin/bash
temp_fifo_file=$$.info        #以當前進程號,為臨時管道取名
mkfifo $temp_fifo_file        #創建臨時管道
exec 6<>$temp_fifo_file       #創建標識為6,可以對管道進行讀寫
rm $temp_fifo_file            #清空管道內容
function f_sleep              
{
  sleep 2
} 
 
temp_thread=2                 #進程數
 
for ((i=0
;i<temp_thread;i++)) #為進程創建相應的占位 do echo #每個echo輸出一個回車,為每個進程創建一個占位 done >&6 #將占位信息寫入標識為6的管道 for ((i=0;i<6;i++)) do read #獲取標識為6的占位 { f_sleep echo $$,$i,`date` sleep 5 echo $$,$i,`date` echo
>&6 #>>>>>當任務執行完後,會釋放管道占位,所以補充一個占位 }& #>>>>>在後臺執行{}中的任務 done <&6 #將標識為6的管道作為標準輸入 wait #等待所有任務完成 exec 6>&- #關閉標識為6的管道

例子

#!/bin/bash
temp_fifo_file
=$$.info #以當前進程號,為臨時管道取名 mkfifo $temp_fifo_file #創建臨時管道 exec 6<>$temp_fifo_file #創建標識為6,可以對管道進行讀寫 rm $temp_fifo_file #清空管道內容 function f_sleep { sleep 2 } temp_thread=2 #進程數 for ((i=0;i<temp_thread;i++)) #為進程創建相應的占位 do echo #每個echo輸出一個回車,為每個進程創建一個占位 done >&6 #將占位信息寫入標識為6的管道 for ((i=0;i<6;i++)) do read #獲取標識為6的占位 { f_sleep echo $$,$i,`date` }& #>>>>>在後臺執行{}中的任務 sleep 5 echo $$,$i,`date` echo >&6 #>>>>>當任務執行完後,會釋放管道占位,所以補充一個占位 done <&6 #將標識為6的管道作為標準輸入 wait #等待所有任務完成 exec 6>&- #關閉標識為6的管道

例子

#!/bin/bash
temp_fifo_file=$$.info        #以當前進程號,為臨時管道取名
mkfifo $temp_fifo_file        #創建臨時管道
exec 6<>$temp_fifo_file       #創建標識為6,可以對管道進行讀寫
rm $temp_fifo_file            #清空管道內容
function f_sleep              
{
  sleep 2
  echo >&6                    #>>>>>當任務執行完後,會釋放管道占位,所以補充一個占位
} 
 
temp_thread=2                 #進程數
 
for ((i=0;i<temp_thread;i++)) #為進程創建相應的占位
do
  echo                        #每個echo輸出一個回車,為每個進程創建一個占位
done >&6                      #將占位信息寫入標識為6的管道
 
for ((i=0;i<6;i++))          
do
  read                        #獲取標識為6的占位
  {
    f_sleep
    echo $$,$i,`date`
  }&                          #>>>>>在後臺執行{}中的任務
  sleep 5
  echo $$,$i,`date`
done <&6                      #將標識為6的管道作為標準輸入
 
wait                          #等待所有任務完成
exec 6>&-                     #關閉標識為6的管道

例子

#!/bin/bash
temp_fifo_file=$$.info        #以當前進程號,為臨時管道取名
mkfifo $temp_fifo_file        #創建臨時管道
exec 6<>$temp_fifo_file       #創建標識為6,可以對管道進行讀寫
rm $temp_fifo_file            #清空管道內容
function f_sleep              
{
  sleep 2
  echo >&6                    #>>>>>當任務執行完後,會釋放管道占位,所以補充一個占位
} 
 
temp_thread=2                 #進程數
 
for ((i=0;i<temp_thread;i++)) #為進程創建相應的占位
do
  echo                        #每個echo輸出一個回車,為每個進程創建一個占位
done >&6                      #將占位信息寫入標識為6的管道
 
for ((i=0;i<6;i++))          
do
  read                        #獲取標識為6的占位
  {
    f_sleep
    echo $$,$i,`date`
    sleep 5
    echo $$,$i,`date`
  }&                          #>>>>>在後臺執行{}中的任務
done <&6                      #將標識為6的管道作為標準輸入
 
wait                          #等待所有任務完成
exec 6>&-                     #關閉標識為6的管道

shell 的多進程