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 – 数据丢失的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 建行的存折怎么开通快捷支付?
- 下一篇: 建行怎么续费短信服务?