sleep能延時。linux sleep命令可以用來將目前動作延遲一段時間,語法“sleep [–help] [–version] number[smhd]”;默認情況下,sleep命令會延遲幾秒鐘,但允許使用后綴指定時間單位來指定延遲的秒數、分鐘、小時或天數。
本教程操作環境:linux7.3系統、Dell G3電腦。
sleep能延時線程。
Linux sleep命令介紹
Linux sleep命令可以用來將目前動作延遲一段時間。
使用權限:所有使用者。
語法
sleep?[--help]?[--version]?number[smhd]
參數說明:
-
–help : 顯示輔助訊息
-
–version : 顯示版本編號
-
number : 時間長度,后面可接 s、m、h 或 d
其中 s 為秒,m 為 分鐘,h 為小時,d 為日數
1、延遲Linux命令執行
默認情況下,sleep命令會等待幾秒鐘。為了理解這一點,讓我們在使用sleep命令前和后輸出當前時間。例如,以下命令在打印當前時間后等待5秒再次打印時間:
$?date?'+%r';?sleep?5;?date?'+%r'
在此示例中,需要使用分號(;)分隔每個命令。
2、發出等待N分鐘的命令
一般情況下,sleep命令允許我們使用后綴指定時間單位,這個可以在sleep命令中使用以下后綴表示:
-
s– 以秒為單位指定時間單位。
-
m– 以分鐘為單位指定時間單位。
-
h– 以小時為單位指定時間單位。
-
d– 以天為單位指定時間單位。
所以,這里將使用’m’后綴休眠1分鐘:
$?date?'+%r';?sleep?1m;?date?'+%r'
3、讓命令休眠X分秒
其實還可以在sleep命令中使用多個后綴。在這種情況下,持續時間是通過將所有值相加來計算的。
為了理解這一點,下面將使用命令休眠1分20秒,命令如下:
$?date?'+%r';?sleep?1m?20s;?date?'+%r'
在上面的示例中,使用了兩個不同的后綴。但是,也可以使用相同的后綴。比如可以用2s和3s后綴來休眠5秒,命令如下:
$?date?'+%r';?sleep?2s?3s;?date?'+%r'
4、通過sleep命令使用浮點數
此外,sleep命令還接受一個浮點數作為輸入,這樣可以使用這種方法睡眠不到一秒鐘。例如,可以使用0.5s值休眠半秒:
$?date?'+%r';?sleep?0.5s;?date?'+%r'
在上面的輸出中,可以看到date命令為秒時間單位顯示了相同的值。
除此之外,還可以使用帶有其它后綴的浮點值。例如,可以使用0.5m值休眠30秒:
$?date?'+%r';?sleep?0.5m;?date?'+%r'
5、使用sleep命令模擬鬧鐘
在前面的幾個例子中,主要介紹了如何使用sleep命令來延遲下一個命令的執行。另外,還可以使用這個技巧來模擬鬧鐘。
因此,接下來使用以下命令在5秒后設置警報:
$?sleep?5;?cvlc?alarm.mp3
上述命令在等待5秒后使用VLC媒體播放器打開alarm.mp3文件。就像任何其它Linux命令一樣,可以使用ctrl+c組合鍵來停止VLC媒體播放器。
sleep命令的使用實例
先讓程序睡上 30 秒
從字面意思看,想必你已經猜出來 sleep 命令的作用啦。簡單地說,sleep 就是讓程序稍稍休息一下,然后,再繼續工作(休息是為了更好地工作……)。
我們讓 Shell 程序小憩 30 秒:
#睡眠30秒 [roc@roclinux?~]$?sleep?30s ? #讓date命令來監督,?看看是不是真的睡了30秒 [roc@roclinux?~]$?date;sleep?30s;?date Thu?Feb?25?08:25:17?CST?2016 Thu?Feb?25?08:25:47?CST?2016
睡眠時間個性化
sleep 命令雖然簡單,但我們可以對它進行個性化定制,讓它變得更好玩一些。
一般來說,sleep 命令后面跟的數值是用來表示時間的,是時間就要有單位,如果我們不指定單位的話,它默認的單位是什么呢?
[roc@roclinux?~]$?date;?sleep?1;?date Thu?Feb?25?09:55:47?CST?2016 Thu?Feb?25?09:55:48?CST?2016
從這個示例來看,默認的單位就是秒啦,和指定單位 s 有同等的效果。
有秒的話,還應該有分鐘和小時才對,那這些單位在 sleep 中如何表示呢?
-
s:表示秒
-
m:表示分鐘
-
h:表示小時
-
d:表示天
比如,如果想讓 Shell 程序睡眠 1 分鐘,應該如何操作呢?
[roc@roclinux?~]$?date;?sleep?1m;?date Thu?Feb?25?10:00:43?CST?2016 Thu?Feb?25?10:01:43?CST?2016
那如果想讓 shell 程序睡眠 1 小時的話,直接把單位換成 h 就可以了。如果我們想讓 shell 程序睡眠 1 分 40 秒,又該怎么操作呢?1 分=60 秒,1 分 40 秒=100 秒,可以直接讓計算機睡眠 100 秒。
[roc@roclinux?~]$?date;?sleep?100;?date Thu?Feb?25?10:12:28?CST?2016 Thu?Feb?25?10:14:08?CST?2016
其實呢,sleep 比你想象得還要體貼,你可以直接這樣輸入:
#注意:?分鐘和秒之間一定要有空格哦 [roc@roclinux?~]$?date;?sleep?1m?40s;?date Thu?Feb?25?10:17:04?CST?2016 Thu?Feb?25?10:18:44?CST?2016
這種方法簡單、直接,節省了我們不少的思考時間。
在 sleep 中最大的單位是 d(天),如果想表示更長的時間,比如周、月、年的話,那么你只能把它們轉換成天來表示了。
#?這樣,??Shell程序乖乖地沉睡?"一周2小時5分4秒" [roc@roclinux?~]$?date;?sleep?7d?2h?5m?4s;?date Thu?Feb?25?10:17:04?CST?2016 Thu?Feb?25?10:18:44?CST?2016
毫秒級睡眠時間可不可以
sleep 命令的默認時間單位是秒,但對于高速運行的程序來說,“秒”還是顯得太長了。那 sleep 能不能實現毫秒級的睡眠呢?答案是可以的,例如,我們讓 Shell 程序睡眠 3 毫秒:
[roc@roclinux?~]$?time?sleep?0.003 ? real????0m0.004s user????0m0.000s sys?0m0.001s
time 可以通過浮點數的方式實現毫秒級的睡眠,但這里有一點需要注意,即睡眠時間的精度。sleep 命令只能保證 10ms 級別的精度控制,對于小于 10ms 的睡眠時間是存在誤差的。實際應用中,如果你對時間精度要求特別高的話,sleep 或許不是一個正確的選擇,還是請考慮其他方法吧。
sleep 的過程中 CPU 是否被占用
默認情況下,sleep 的進程是不占用 CPU 時間的,我們可以通過實驗來說明這個問題:
[roc@roclinux?~]$?time?sleep?1 0.00user?0.00system?0:01.00elapsed?0%CPU?(0avgtext+0avgdata?2560maxresident)k 0inputs+0outputs?(0major+200minor)pagefaults?0swaps
看到了嗎?0.00user、0.00system、0%CPU 這三個輸出項都表明 sleep 是不會耗費 CPU 的計算資源的。
注意:上面使用了time命令,它指代的是 /usr/bin/time,而不是 Shell 內置的 time 命令。/usr/bin/time 命令可以顯示更多的信息,而 Shell 內置的命令做不到這一點。
相關推薦:《Linux視頻教程》