❶ linux中的sleep怎麼用
sleep函數: #include <unistd.h> unsigned int sleep(unsigned int seconds); 此函數使調用進程被掛起,直到滿足以下條件之一: 1)已經過了seconds所指定的牆上時鍾時間 2)調用進程捕捉到一個信號並從信號處理程序返回 註:由於其他系統活動,實際返回時間比所要求的會遲一些,像alarm一樣。 sleep的返回值: 1)在上述第一種情形中,返回值是0 2)當由於捕捉到某個信號sleep提前返回時,返回值是未睡夠的時間(所要求的時間減去實際休眠時間) 看看下面的例子,猜猜sleep()的返回值是多少 1 #include <stdio.h> 2 #include <time.h> 3 #include <signal.h> 4 5 #define DIAPAUSE 30 //sleep time 30s 6 #define TIMEOUT 5 7 8 void sigalrm(int signo); 9 10 int main() 11 { 12 struct sigaction sa; 13 14 sa.sa_handler = sigalrm; 15 sa.sa_flags = 0; 16 sigemptyset(&sa.sa_mask); 17 if(sigaction(SIGALRM, &sa, NULL) < 0) 18 { 19 printf("sigaction error!\n"); 20 return; 21 } 22 23 while(1) 24 { 25 printf("alarm(TIMEOUT)...\n"); 26 alarm(TIMEOUT); 27 printf("...\n"); 28 printf("sleep(DIAPAUSE) == %d\n", sleep(DIAPAUSE)); 29 } 30 31 return 0; 32 } 33 34 void sigalrm(int signo) 35 { 36 printf("timeout...\n"); 37 return; 38 } sleep函數的返回值是25。 如果將TIMEOUT的值改為大於DIAPAUSE的值,如50的話,sleep函數在睡夠了DIAPAUSE後就會返回,返回值為0。 如果我們即需要alarm又需要sleep一個預訂的事件怎麼辦?如上面的例子,我想在...後再sleep 30s然後再進入循環。這在socket通訊過程中,在設置超時的時候可能會用到。 注意到alarm函數。 #include <unistd.h> unsigned int alarm(unsigned int senconds); 使用alarm函數可以設置一個計時器,在將來某個指定的時間該計時器會超時。當計時器超時時,產生SIGALARM信號。如果不捕捉或不忽略此信號,則其默認動作是終止調用該alarm函數的進程。 每個進程只能有一個鬧鍾時鍾,如果在調用alarm時,已經為該進程設置過鬧鍾時鍾,而且它還沒有超時,則將該鬧鍾時鍾的余留值作為本次alarm函數調用的返回值。以前登記的鬧鍾時鍾將被新值代替。 如果有以前為進程登記的尚未超過的鬧鍾時鍾,而且本次調用的seconds為0,則取消以前的鬧鍾時鍾,其餘留值仍作為alarm的返回值。 (以上這幾段話摘自《unix環境高級編程》)。 所以在while循環的printf("...\n");後面添加一句alarm(0);就可以滿足我的要求,即在...後再sleep 30s然後再進入循環。
❷ 在linux下,想用sleep函數實現延時五秒,應該怎麼設參數
使用許可權 : 所有使用者
使用方式 : sleep [--help] [--version] number[smhd]
說明 : sleep 可以用來將目前動作延遲一段時間
參數說明 :
--help : 顯示輔助訊息
--version : 顯示版本編號
number : 時間長度,後面可接 s、m、h 或 d
其中 s 為秒,m 為 分鍾,h 為小時,d 為日數
例子 :
顯示目前時間後延遲 1 分鍾,之後再次顯示時間 :
date;sleep 1m;date
這個命令更多應用於shell腳本編程里和程序里
如下面的一段程序:
應用程序:
復制代碼
代碼如下:
#include <syswait.h>
usleep(n) //n微秒
Sleep(n)//n毫秒
sleep(n)//n秒
驅動程序:
#include <linux/delay.h>
mdelay(n) //milliseconds 其實現
#ifdef notdef
#define mdelay(n) (\
{unsigned long msec=(n); while (msec--) udelay(1000);})
#else
#define mdelay(n) (\
(__builtin_constant_p(n) && (n)<=MAX_UDELAY_MS) ? udelay((n)*1000) : \
({unsigned long msec=(n); while (msec--) udelay(1000);}))
#endif
調用asm/delay.h的udelay,udelay應該是納秒級的延時
Dos:
sleep(1); //停留1秒
delay(100); //停留100毫秒
Windows:
Sleep(100); //停留100毫秒
Linux:
sleep(1); //停留1秒
usleep(1000); //停留1毫秒
每一個平台不太一樣,最好自己定義一套跨平台的宏進行控制
秒還是微秒?關於延時函數sleep()
因為要寫一段代碼,需要用到sleep()函數,在我印象中,sleep(10)好像是休眠10微秒,結果卻是休眠了10秒(在Linux下)。覺得很奇怪,因為頭兒也記得好像是微秒為單位的。所以就查了一下。
原來linux下的sleep函數原型為:
unsigned int sleep(unsigned int seconds);
而MFC中的Sleep函數原型為:
void Sleep(DWORD dwMilliseconds);
也就是說,Linux下(使用的gcc的庫),sleep()函數是以秒為單位的,sleep(1);就是休眠1秒。而MFC下的sleep()函數是以微秒為單位的,sleep(1000);才是休眠1秒。原來如此啊。而如果在Linux下也用微妙為單位休眠,可以使用線程休眠函數:void usleep(unsigned long usec);當然,使用的時候別忘記#include <system.h>哦。
另外值得一提的是,linux下還有個delay()函數,原型為extern void delay(unsigned int msec);它可以延時msec*4毫秒,也就是如果想延時一秒鍾的話,可以這么用 delay(250);
❸ linux sleep 是多久
linux下的sleep單位是秒。
可能是由於某個進程長期得不到響應,比如nfs造成的IO中斷,應用一直在等待響應,等的都睡著了。。所以也看不到報錯,呵呵。具體的也看不出到底是哪個進程引起的。建議就是重啟相關的java應用。或者重啟機器。
進程為什麼會被置於uninterruptible sleep狀態呢?處於uninterruptible sleep狀態的進程通常是在等待IO,比如磁碟IO,網路IO,其他外設IO,如果進程正在等待的IO在較長的時間內都沒有響應,那麼就很會不幸地被 ps看到了,同時也就意味著很有可能有IO出了問題,可能是外設本身出了故障,也可能是比如掛載的遠程文件系統已經不可訪問了,我以前遇到的問題就是由 down掉的NFS伺服器引起的。
正是因為得不到IO的相應,進程才進入了uninterruptible sleep狀態,所以要想使進程從uninterruptible sleep狀態恢復,就得使進程等待的IO恢復,比如如果是因為從遠程掛載的NFS卷不可訪問導致進程進入uninterruptible sleep狀態的,那麼可以通過恢復該NFS卷的連接來使進程的IO請求得到滿足,除此之外,要想幹掉處在D狀態進程就只能重啟整個Linux系統了。
❹ linux sleep命令怎麼使用
sleep命令
常用工具命令 sleep命令暫停指定的時間。
語法
sleep(參數)
參數
時間:指定要暫停時間的長度。
時間長度,後面可接 s、m、h 或 d,其中 s 為秒,m 為 分鍾,h 為小時,d 為日數。 實例 有時在寫一些以循環方式運行的監控腳本,設置時間間隔是必不可少的,下面是一個Shell進度條的腳本演示在腳本中生成延時。
#!/bin/bash
b='' for ((i=0;$i<=100;i++)) do printf "Progress:[%-100s]%d%%\r" $b $i sleep 0.1 b=#$b done
❺ linux的sleep函數有什麼用
sleep把進程的運行狀態改為睡眠,將其從系統可執行隊列去掉,這樣系統就不會調度到該進程,不會分配CPU時間片。同時根據該進程的睡眠時間,將進程掛入相應的定時器隊列中。
同時內核維持一個定時器隊列,每一次時鍾中斷處理,都把當前到期的隊列中的進程喚醒,加入到可運行進程隊列中。 同時對所有掛入定時器隊列中的進程時間值減1,
[cpp] view plain
clock_t start=clock();
sleep(5);
clock_t end=clock();
float time=(float)(end-start)/CLOCKS_PER_SEC;
printf("Sleep clock:%f\n",time);
首先獲取當前系統滴答數A,然後再加上需要sleep的時長結合CPU時鍾頻率計算得到的滴答數B。再來一個while循環,循環體中不停獲取當前滴答數,大於(A+B)時跳出循環,函數返回。
❻ 如何在Linux系統里使用sleep函數
sleep通常用在循環中讓程序掛起等時間過了再繼續往下執行
可以用 man 3 sleep 可以看到頭文件和幫助
❼ Linux為啥有很多sleeping進程呢
sleeping本身是正常的,是休眠的意思。對於單CPU系統來講,某個時間點上只有一個running的進程,其他進程為休眠或就緒狀態。關鍵是你的進程數量太多了,看看是哪些進程這么多。
❽ linux sleep命令求解
ctrl+c 結束下
sleep 30
這樣休息30秒即可,別搞得太久了
❾ 請教Linux下的sleep函數
函數名: sleep、usleep
功 能: 執行掛起一段時間
頭文件: #include <unistd.h>
區 別: unsigned sleep (unsigned int seconds);//n秒
int usleep (useconds_t usec);//n微秒
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
#include<unistd.h>
int main()
{
int sec = 0,
usec = 0;
while(1)
{
printf("sec = %d \n",++sec);
sleep(1);
printf("usec = %d \n",++usec);
usleep(1000000);
}
return 0;
}
Linux下的sleep函數原型為:
unsigned int sleep(unsigned int seconds);
而MFC中的Sleep函數原型為:
void Sleep(DWORD dwMilliseconds);
也就是說,Linux下(使用的gcc的庫),sleep()函數是以秒為單位的,sleep(1);就是休眠1秒。而MFC下的Sleep()函數是以毫秒為單位的,sleep(1000);才是休眠1秒。而如果在Linux下也用微妙為單位休眠,可以使用線程休眠函數:void usleep(unsigned long usec)。
Linux下還有個delay()函數,原型為extern void delay(unsigned int msec);它可以延時msec*4毫秒,也就是如果想延時一秒鍾的話,可以這么用 delay(250)。
❿ linux 中sleep是什麼意思
sleep
睡眠,參數為時間,單位:秒
shell中,用法:
sleep seconds,表示睡眠多少秒
代碼中,用法:
#include <unistd.h>
unsigned int sleep(unsigned int seconds);
視實際需要,有時需要睡眠若干秒後繼續執行,如:
執行某一過程,但並不關心是否執行完畢、執行成功還是失敗,也可能執行過程中掛住,這時又不想一直卡在這里不動,就可設定一個睡眠時間x秒,x秒後繼續向下執行。