日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

daemon函数的原理及使用详解

發(fā)布時(shí)間:2024/4/14 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 daemon函数的原理及使用详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在linux系統(tǒng)下創(chuàng)建守護(hù)進(jìn)程的原理及步驟在文章(鏈接如下)中介紹過。http://blog168.chinaunix.net/space.php?uid=20196318&do=blog&id=28738

?

其實(shí),linux提供了daemon函數(shù)用于創(chuàng)建守護(hù)進(jìn)程,實(shí)現(xiàn)原理與上文中介紹的是一樣的。

#include

int daemon(int nochdir, int noclose);

1.?daemon()函數(shù)主要用于希望脫離控制臺,以守護(hù)進(jìn)程形式在后臺運(yùn)行的程序。

2.?當(dāng)nochdir為0時(shí),daemon將更改進(jìn)城的根目錄為root(“/”)。

3.?當(dāng)noclose為0是,daemon將進(jìn)城的STDIN, STDOUT, STDERR都重定向到/dev/null。

?

daemon的實(shí)現(xiàn)大致如下:

int daemon( int nochdir,??int noclose )
{
? ?pid_t pid;
? ?if ( !nochdir && chdir("/") != 0 ) //如果nochdir=0,那么改變到"/"根目錄
? ?? ? return -1;
? ?
? ?if ( !noclose ) //如果沒有noclose標(biāo)志
? ?{
? ??????int fd = open("/dev/null", O_RDWR);?
? ??????if ( fd??<??0 )
? ?? ???????return -1;

?

???????/*?重定向標(biāo)準(zhǔn)輸入、輸出、錯誤 到/dev/null,

鍵盤的輸入將對進(jìn)程無任何影響,進(jìn)程的輸出也不會輸出到終端

*/

dup(fd, 0);

dup(fd, 1);

dup(fd, 2);??? ?

close(fd);

}

? ?pid = fork();??//創(chuàng)建子進(jìn)程.
? ?if (pid??<??0)??//失敗
? ????return -1;
? ?if (pid > 0)
? ?????_exit(0); //返回執(zhí)行的是父進(jìn)程,那么父進(jìn)程退出,讓子進(jìn)程變成真正的孤兒進(jìn)程.

//創(chuàng)建的?daemon子進(jìn)程執(zhí)行到這里了
? ?if ( setsid()??< 0 )???//創(chuàng)建新的會話,并使得子進(jìn)程成為新會話的領(lǐng)頭進(jìn)程
? ??? return -1;
? ?return 0;??//成功創(chuàng)建daemon子進(jìn)程
}

?

使用實(shí)例:

int main()

{

????daemon(1, 1);?//參數(shù)根據(jù)需求確定

????/*??在這里添加你需要在后臺做的工作代碼??*/

}

如何殺死這樣的進(jìn)程:

通過ps+grep找到對應(yīng)的后臺進(jìn)程,使用kill命令將進(jìn)程殺死;也可創(chuàng)建shell腳本對進(jìn)程的啟動、關(guān)閉、重啟進(jìn)行自動管理

轉(zhuǎn)載于:https://www.cnblogs.com/fnlingnzb-learner/p/6743336.html

總結(jié)

以上是生活随笔為你收集整理的daemon函数的原理及使用详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。