linux c daemon 程式後台執行函式

2021-09-25 22:11:07 字數 1194 閱讀 6026

linux提供了 daemon()函式主要用於希望脫離控制台,以守護程序形式在後台執行的程式

原型:

#include int daemon(int nochdir, int noclose);
引數:

當nochdir為0時,daemon將更改進城的根目錄為root(「/」)。

當noclose為0是,daemon將進城的stdin, stdout, stderr都重定向到/dev/null。

返回值:

deamon()呼叫了fork(),如果fork成功,那麼父程序就呼叫_exit(2)退出,所以看到的錯誤資訊 全部是子程序產生的。如果成功函式返回0,否則返回-1並設定errno。

daemon的實現大致如下:

int daemon( int nochdir, int noclose )

if (!noclose) //如果沒有noclose標誌

/* 重定向標準輸入、輸出、錯誤 到/dev/null,

鍵盤的輸入將對程序無任何影響,程序的輸出也不會輸出到終端

*/dup(fd, 0);

dup(fd, 1);

dup(fd, 2);

close(fd);

}pid = fork(); //建立子程序.

if (pid < 0) //失敗

if (pid > 0)

//建立的 daemon子程序執行到這裡了

if (setsid() < 0) //建立新的會話,並使得子程序成為新會話的領頭程序

return 0; //成功建立daemon子程序

}

使用示例如下:

#include #include #include #include #include int main(int argc, char *ar**)

sleep(10);

if(getcwd(strcurpath, path_max) == null)

printf("%s/n", strcurpath);

return 0;

}

假如執行成功,父程序在daemon函式執行完畢後自殺,以後的休眠和列印全部是子程序來執行。

可以修改daemon函式的引數來檢視效果。

可以去掉daemon一句,用./a.out&來驗證效果。

執行後自刪除程式

當乙個可執行程式exe在執行過程中,程式檔案無法刪除,這是因為系統將每個正在執行的程式對應的硬碟檔案 對映到記憶體,即虛擬記憶體,要實現自刪除,關鍵一點在程式退出前將程式從記憶體對映中解放出來,然後 再呼叫檔案操作函式刪除程式檔案!typedef int winapi pfclose lpvoid ...

使用者登出後,程式繼續執行

最近寫了乙個程式,需要在伺服器上執行,編完了以後,到伺服器執行,發現,用遠端登陸開啟這個程式,沒有問題,可是過了十分鐘,遠端伺服器自動登出了,程式也就終止。這樣,程式就不能正常工作。想了一天多的辦法,終於在今天把這個問題解決了。首先用.net寫個服務 新建乙個服務,在設計頁面上點右鍵,出現選單後,選...

C C 程式啟動後記憶體分布

1 從低位址開始,依次是 區,資料區 包含靜態資料區 常量資料區 堆 自下向上生長 動態庫的檔案對映 棧 3 不同執行緒的棧有一定的間距,基本等同於執行緒棧的限制大小,執行緒切換前會儲存當前執行緒的棧頂,這樣當再次切換回來時,可以從棧頂向下分配 4 程式的有些記憶體之存在虛擬位址空間,如果實際沒有使...