日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 进城 管道丢数据,linux – 使用命名管道与bash – 数据丢失的问题

發布時間:2023/12/3 linux 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 进城 管道丢数据,linux – 使用命名管道与bash – 数据丢失的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

有人在線搜索,發現簡單的“教程”使用命名管道.但是,當我做任何后臺工作時,我似乎失去了大量的數據.

[[編輯:找到一個更簡單的解決方案,看到回復帖子.所以我提出的問題現在是學術性的 – 萬一有人想要一個工作服務器]]

使用Ubuntu 10.04與Linux 2.6.32-25-generic#45-Ubuntu SMP Sat Oct 16 19:52:42 UTC 2010 x86_64 GNU / Linux

GNU bash,版本4.1.5(1)-release(x86_64-pc-linux-gnu).

我的bash功能是:

function jqs

{

pipe=/tmp/__job_control_manager__

trap "rm -f $pipe; exit" EXIT SIGKILL

if [[ ! -p "$pipe" ]]; then

mkfifo "$pipe"

fi

while true

do

if read txt

then

echo "$(date +'%Y'): new text is [[$txt]]"

if [[ "$txt" == 'quit' ]]

then

break

fi

fi

done

}

我在后臺運行它:

> jqs&

[1] 5336

現在我喂它了

for i in 1 2 3 4 5 6 7 8

do

(echo aaa$i > /tmp/__job_control_manager__ && echo success$i &)

done

輸出不一致.

我經常得不到所有的成功回響.

我得到最多的新的文本回聲成功回聲,有時較少.

如果我刪除’&’從’feed’,它似乎工作,但我被阻止,直到輸出被讀取.因此,我想讓子進程被阻止,但不是主進程.

目的是編寫一個簡單的作業控制腳本,所以我最多可以并行運行10個作業,并排隊休息以備后續處理,但可靠地知道它們運行.

全職工作經理如下:

function jq_manage

{

export __gn__="$1"

pipe=/tmp/__job_control_manager_"$__gn__"__

trap "rm -f $pipe" EXIT

trap "break" SIGKILL

if [[ ! -p "$pipe" ]]; then

mkfifo "$pipe"

fi

while true

do

date

jobs

if (($(jobs | egrep "Running.*echo '%#_Group_#%_$__gn__'" | wc -l) < $__jN__))

then

echo "Waiting for new job"

if read new_job

then

echo "new job is [[$new_job]]"

if [[ "$new_job" == 'quit' ]]

then

break

fi

echo "In group $__gn__, starting job $new_job"

eval "(echo '%#_Group_#%_$__gn__' > /dev/null; $new_job) &"

fi

else

sleep 3

fi

done

}

function jq

{

# __gn__ = first parameter to this function, the job group name (the pool within which to allocate __jN__ jobs)

# __jN__ = second parameter to this function, the maximum of job numbers to run concurrently

export __gn__="$1"

shift

export __jN__="$1"

shift

export __jq__=$(jobs | egrep "Running.*echo '%#_GroupQueue_#%_$__gn__'" | wc -l)

if (($__jq__ '

then

eval "(echo '%#_GroupQueue_#%_$__gn__' > /dev/null; jq_manage $__gn__) &"

fi

pipe=/tmp/__job_control_manager_"$__gn__"__

echo $@ >$pipe

}

調用

jq

jq abc 2 sleep 20

將開始一個過程.

那部分工作正常.開始第二個,罰款.

一個接一個的手似乎工作正常.

但是,在一個循環中,10開始似乎失去了系統,就像上面的更簡單的例子.

任何關于我能夠做的解決IPC數據的明顯損失的提示將不勝感激.

問候,

阿蘭.

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的linux 进城 管道丢数据,linux – 使用命名管道与bash – 数据丢失的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。