利用管道實現Shell多程序

2022-03-04 02:34:49 字數 765 閱讀 3680

shell中有個&,表示該程式在後台執行,其實是fork了乙個子程序,跟系統呼叫是一樣的。

在實際的操作過程中,有時需要控制後台程式的個數,畢竟啟動太多的後台,會對服務的效能造成影響。

所以需要控制後台程式的個數。

在shell中,可以利用管道技術來實現,如下是程式的模板及其注釋,有需要人可以拿去。

#!/bin/bash

fifo="

/tmp/$$.fifo

"#建立管道$$表示shell分配的程序號

mkfifo

$fifo

exec

6<>$fifo #將fifo的fd與6號fd繫結

thread_num=8

#啟動的程序個數

count=0

;#預分配資源

while [[ $count -lt $thread_num ]]; do

echo >&6

#let count=count+1

count=$((count + 1

))done

#任務列表

file_list=$1

forfile

in$file_list

doread -u6 #請求乙個資源

& #後台執行

done

wait

#等待所有的任務完成

exec

6>&-#關閉fd 6描述符

rm $fifo

利用管道實現多程序間通訊

管道是linux系統最常見的程序間通訊方式之一,它在兩個程序之間實現乙個資料流通的通道,資料以一種資料流的方式在程序間流動。它把乙個程式的輸出直接連到另乙個程式的輸入。管道可以分為以下兩種,利用這兩種管道可以實現程序間的通訊,但是對於程序間的關係會有所限制 解決和 方法如下,資料以字元為例,通訊的內...

利用管道實現程序間通訊

管道 pipe 是程序用來通訊的共享記憶體區域。乙個程序往管道中寫入資訊,而其它的程序可以從管道中讀出資訊。如其名,管道是程序間資料交流的通道。郵路 mailslots 的功能與管道類似,也是程序間通訊 interprocess communications,ipc 的媒介,只不過其具體實現方式與管...

利用管道實現程序間同步

程序間同步是指程序的執行有先後順序,如a程序等待b程序執行完某個動作a程序才能繼續往下執行。程序間通訊的方法都可以用來同步,只是操作是否方便的乙個問題。複習了unix高階程式設計,覺得posix的訊號量是使用起來最方便的。可是無奈程式寫完放到板子裡面跑時,列印提示sem open function ...