sleep命令_Linux sleep命令:讓程式暫停或休眠一段時間

2020-07-16 10:04:30
sleep 命令,讓睡眠變得有學問。本文將對 sleep 命令進行詳細地介紹,一起來看看 sleep 命令如何讓睡眠變得有學問。

先讓程式睡上 30 秒

從字面意思看,想必你已經猜出來 sleep 命令的作用啦。簡單地說,sleep 就是讓程式稍稍休息一下,然後,再繼續工作(休息是為了更好地工作……)。

我們讓 Shell 程式小憩 30 秒:
#睡眠30秒
[[email protected] ~]$ sleep 30s
 
#讓date命令來監督, 看看是不是真的睡了30秒
[[email protected] ~]$ date;sleep 30s; date
Thu Feb 25 08:25:17 CST 2016
Thu Feb 25 08:25:47 CST 2016

睡眠時間個性化

sleep 命令雖然簡單,但我們可以對它進行個性化客製化,讓它變得更好玩一些。

一般來說,sleep 命令後面跟的數值是用來表示時間的,是時間就要有單位,如果我們不指定單位的話,它預設的單位是什麼呢?
[[email protected] ~]$ 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 分鐘,應該如何操作呢?
[[email protected] ~]$ 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 秒。
[[email protected] ~]$ date; sleep 100; date
Thu Feb 25 10:12:28 CST 2016
Thu Feb 25 10:14:08 CST 2016

其實呢,sleep 比你想象得還要體貼,你可以直接這樣輸入:
#注意: 分鐘和秒之間一定要有空格哦
[[email protected] ~]$ 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秒"
[[email protected] ~]$ 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 毫秒:
[[email protected] ~]$ time sleep 0.003
 
real    0m0.004s
user    0m0.000s
sys 0m0.001s

time 可以通過浮點數的方式實現毫秒級的睡眠,但這裡有一點需要注意,即睡眠時間的精度。sleep 命令只能保證 10ms 級別的精度控制,對於小於 10ms 的睡眠時間是存在誤差的。實際應用中,如果你對時間精度要求特別高的話,sleep 或許不是一個正確的選擇,還是請考慮其他方法吧。

sleep 的過程中 CPU 是否被占用

預設情況下,sleep 的進程是不占用 CPU 時間的,我們可以通過實驗來說明這個問題:
[[email protected] ~]$ 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 內建的命令做不到這一點。