導航:首頁 > 編程系統 > linuxsleep線程

linuxsleep線程

發布時間:2024-12-04 22:14:36

linux中的進程問題,以及exit(0); 和sleep(5);

俺跟你解釋一下:

fork是一個跟當前進程一模一樣的進程,包括當前進程的所有狀態(有特殊設置就不會拷貝,如文件標識)。子進程如果不設置新的執行程序,會繼續執行fork之後的代碼,注意前面提過的跟父進程一模一樣的代碼。

pid==0代表是子進程,因此子進程會執行這段代碼:

if(pid==0)
{
printf("child!!! ");
//這里會造成子進程的主線程,main執行線程,阻塞5秒
sleep(5);
exit(0);
}

pid > 0 代表是父進程,因此父進程繼續執行的代碼為:

if(pid>0)
{
//此處必須等待子進程結束,子進程調用exit(0),時會通知父進程繼續執行
//屬於進程間通訊、同步的一個手段之一。那子進程等待5秒被喚醒,執行exit(0)
//父進程收到通知,獲取到子進程的退出狀態,繼續就會printf,基本也就是等待了5秒
//然後父進程return0等價於exit(0)正常結束
wait(NULL);//不這樣寫,父進程直接結束可能會產生僵屍進程,也可能變成孤兒進程由
//由init進程領養,並正確結束。通用的做法必須wait。根據操作系統以及版本不同處理
//方式可能不一樣,如aix可能就會有僵屍進程產生
printf("father!!! ");
}

❷ linux下main()中新建一個線程,延時問題

你對sleep可能有些誤解,sleep本身就是使進程睡眠,睡眠的線程不會去佔用CPU的。對於一個正在運行的線程來說,他最主要佔用的資源就是CPU運行時間和內存。既然SLEEP使其放棄對CPU的進程許可權(意思是這段時間內,他不會到CPU執行,如果想了解原因和具體實現可以參考linux內核代碼對sleep的實現),那你不想讓他佔用資源意思就是說:不想讓它占內存嘍??
從定義角度來說,線程不擁有內存資源(從內核中可以查到fork和vfork創建的都是線程,他們都不會新分配內存空間,而是和父進程共享內存空間),所以說你已經沒有什麼可以釋放了。如果還不明白,可以發信息給我。
或許你更希望做的是,壓根就不啟動這個線程,而是一個小時後啟動。因為你沒有辦法然main主線程1小時後啟動這個線程,因為你把握不好時間,那我可以建議你考慮下linux守護線程cron,這個可以達到你1小時後啟動的目的。

❸ 嵌入式 linux下sleep函數到底是線程休眠還是進程休眠

Linux實際上沒有真正復線程制的概念,pthread庫中的「線程」被許多人稱作「輕量級的進程",內核負責調度所有的進程,且在內核眼裡被我們看做線程的東西與普通進程是無差別的。
sleep函數休眠的是當前進程,而pthread庫中的「線程」事實上就是進程,因此該函數的作用域就是這個「線程」。

❹ 在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函數

函數名: 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)。

閱讀全文

與linuxsleep線程相關的資料

熱點內容
西門子plc模擬量輸入怎麼編程 瀏覽:281
狂戰異界升級 瀏覽:380
亞索最初版本技能 瀏覽:602
程序鎖鎖不了簡訊 瀏覽:202
vue哪些情況可以更新數據 瀏覽:408
有數據如何自動畫幾何圖 瀏覽:662
不聯網的文件如何打開到u盤 瀏覽:907
標你妹上傳文件失敗 瀏覽:101
怎麼清除蘋果充值記錄 瀏覽:434
win10系統下查看mac盤文件在哪裡 瀏覽:147
存放軟體配置文件的目錄 瀏覽:211
bilibili如何改密碼 瀏覽:254
win10啟動跳過鎖屏 瀏覽:953
headfirstjsp目錄 瀏覽:759
手機禁用自動重新連接無線網路 瀏覽:20
比特幣資料庫下載 瀏覽:624
如何在記事本里編程序 瀏覽:556
開心消消樂裝哪個文件夾 瀏覽:986
58幫幫安裝安裝提示系統文件損壞 瀏覽:653
vs2012顯示所有文件 瀏覽:953

友情鏈接