2013-05-11 50 views
2

我在Ubuntu 13.04中編寫了一個bash腳本,它需要睡眠通過參數傳遞的特定秒數。 我確信,睡眠允許浮動尋找文檔中點數:沉睡的某些數字在Linux bash中永遠持續下去

與需要數量的整數大多數實現,這裏NUMBER可以是任意浮點數。

事實上,它適用於某些值。例如,對於「0.1」,「0.01」,「0.02」,「0.03」或「0.4」可以,但對於其他值(如「0.04」或「0.05」),它會永遠持續。

我的意思是, 這將工作:

sleep 0.03 

...但是這將永遠持續下去:

sleep 0.04 

任何人都知道這是爲什麼?

謝謝!

+0

如果使用「ENV睡眠」,而不是「睡眠」會發生什麼? – 2013-05-11 17:45:51

+1

您是否調用了另一個終端並運行top和ps以查看發生了什麼?您可能還想將其作爲Ubuntu可能存在的bug或問題放入啓動板中。我已經在12.04試過了,並且睡了0.04個作品。所以,這可能是Ubuntu中的一個錯誤。 – octopusgrabbus 2013-05-11 17:46:45

+3

在這裏不可重現,我在'睡眠'上投入的任何價值都按預期工作。 – 2013-05-11 17:47:05

回答

1

這可能是睡眠命令的錯誤...

您也可以使用bash執行,直到錯誤是固定的,創建腳本此別名,但看到sleep --help如果要模擬所有功能。

alias sleep='read -t' 

現在就試試:

date +"%S.%N"; sleep 0.04; date +"%S.%N"; 

這部作品在Ubuntu 12.10已經。

編輯:這是不太精確,但如果你不需要睡眠命令的額外功能也工作:

function FUNCsleep() { 
    local delay=$1; 
    local beginAt=`date +"%s.%N"`; 
    while true; do 
    local now=`date +"%s.%N"`; 
    if((`echo "($now-$beginAt)>=$delay" |bc -l`==1));then 
     break; 
    fi; 
    done; 
} 
alias sleep='FUNCsleep' 
+0

@ user1031431就像你對你的評論所說的那樣,它在另一臺13.10機器上工作,你應該檢查'sleep --version'(mine是8.13)。除了這種可能的差異,我的猜測是你有硬件錯誤。但是,當3 ppl(直到現在)投票你的問題,我也可以考慮一個錯誤的CPU版本,但這可能是太多的猜測... – 2013-05-11 19:38:27