linux腳本sleep
① linux 中sleep是什麼意思
sleep
睡眠,參數為時間,單位:秒
shell中,用法:
sleep seconds,表示睡眠多少秒
代碼中,用法:
#include <unistd.h>
unsigned int sleep(unsigned int seconds);
視實際需要,有時需要睡眠若干秒後繼續執行,如:
執行某一過程,但並不關心是否執行完畢、執行成功還是失敗,也可能執行過程中掛住,這時又不想一直卡在這里不動,就可設定一個睡眠時間x秒,x秒後繼續向下執行。
② 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()、usleep()、nanosleep()函數
原文地址: https://blog.csdn.net/weibo1230123/article/details/79139476
sleep()非系統調用,sleep()是在庫函數中實現的,它是通過alarm()來設定報警時間,使用sigsuspend()將進程掛起在信號SIGALARM上。
sleep()只能精確到秒級上。sleep()會令目前的進程暫停,直到達到參數seconds 所指定的時間,或是被信號所中斷。
return:若進程暫停到參數seconds 所指定的時間,成功則返回0,若有信號中斷則返回剩餘秒數。
除了時間單位為微秒以外,在使用上與sleep()差不多。還有就是實現也是不同的,sleep因為是用alarm實現的,所以時間單位為s ,而usleep的時間單位為us
,那肯定不是由alarm實現的,所以說它們的實現不同,但都是linux用的,而window下不能用,因為都是sleep和usleep都是在unistd.h下定義的。
return:若進程暫停到參數seconds 所指定的時間,成功則返回0,若有信號中斷則返回剩餘微秒數。
這個函數功能是暫停某個進程直到你規定的時間後恢復,參數req就是你要暫停的時間,其中req->tv_sec是以秒為單位,而tv_nsec以毫微秒為單位(10的-9次方秒)。由於調用nanosleep是是進程進入TASK_INTERRUPTIBLE,這種狀態是會相應信號而進入TASK_RUNNING狀態的,這就意味著有可能會沒有等到你規定的時間就因為其它信號而喚醒,此時函數返回-1,切還剩餘的時間會被記錄在rem中。
return: 若進程暫停到參數 req所指定的時間,成功則返回0,若有信號中斷則返回-1,並且將剩餘微秒數記錄在 rem中。
unistd.h 是 unix 系統標准頭文件,用於系統調用,相當於win32中的windows.h,unistd.h 定義的函數只能用於UNIX環境中,而不能用於windows。所以sleep 和 usleep 只能用於linux下,而不能用於windows 。
nalosleep 和 其它時間日期操作函數一樣都是定義在time.h中的,所以都適用
④ 在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伺服器rc.local 執行腳本,中的sleep命令
sleep 30,等待30秒。
建議把sleep命令以及sleep之後的動作寫在先前那個命令動作後面,同時放置在後台。
⑥ linux下的sleep函數
您好,
請在printf的字串後加換行符
即
{printf("%d \n",i); sleep(1); }
printf是行緩沖列印,它有一個buf,buf滿或遇\n,列印輸出
請採納為最佳答案,謝謝
⑦ Linux下的sleep函數 要用的話得包涵什麼頭文件啊
Linux下的sleep函數要用的話得需要#include <unistd.h>
sleep把進程的運行狀態改為睡眠,將其從系統可執行隊列去掉,這樣系統就不會調度到該進程,不會分配CPU時間片,同時根據該進程的睡眠時間,將進程掛入相應的定時器隊列中。
同時內核維持一個定時器隊列,每一次時鍾中斷處理,都把當前到期的隊列中的進程喚醒,加入到可運行進程隊列中。 同時對所有掛入定時器隊列中的進程時間值減1。
參考代碼:
#include<stdio.h>
#include<unistd.h>
intmain()
{
int sec=0,
usec=0;
while(1)
{
printf("sec=%d ",++sec);
sleep(1);
printf("usec=%d ",++usec);
usleep(1000000);
}
return0;
}
(7)linux腳本sleep擴展閱讀:
在Linux下,sleep中的「s」不大寫
sleep()單位為秒,usleep()裡面的單位是微秒。在內核中,sleep的實現是由pause函數和alarm函數兩個實現的。
特別注意在Codeblocks環境下是無法使用sleep函數的,因為在windows上Codeblocks採用mingw(Gnu在Window環境下的編譯器,可以充分使用WindowsApi)作為編譯器,而在stdlib.h中sleep的說明如下:_CRTIMP void __cdecl __MINGW_NOTHROW _sleep (unsigned long) __MINGW_ATTRIB_DEPRECATED;可以認為mingw舍棄了sleep函數,建議用Sleep實現sleep。
⑧ linux在原來的tty上殺死sleep怎麼操作
1、首先打開linux虛擬機,運行虛擬機,在虛擬機中打開明令行。
2、其次使用killall通過程序的名字,來殺死進程。
3、最後輸入命令就可以在原來的tty上殺死sleep了。
⑨ 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系統c語言進程不想被sleep阻塞等待怎麼解決
1、啟動後檯子任務,在執行命令後加&操作符,表示將命令放在子shell中非同步執行。可以達到多線程效果。如下,sleep10#等待10秒,再繼續下一操作sleep10當前shell不等待,後檯子shell等待。
2、wait命令wait是用來阻塞當前進程的執行,直至指定的子進程執行結束後,才繼續執行。使用wait可以在bash腳本「多進程」執行模式下,起到一些特殊控制的作用。