Linux:守护进程详解及实现
轉(zhuǎn)載:守護進程
其實,linux提供了daemon函數(shù)用于創(chuàng)建守護進程,實現(xiàn)原理與上文中介紹的是一樣的。
#include
int daemon(int nochdir, int noclose);
1.?daemon()函數(shù)主要用于希望脫離控制臺,以守護進程形式在后臺運行的程序。
2.?當nochdir為0時,daemon將更改進城的根目錄為root(“/”)。
3.?當noclose為0是,daemon將進城的STDIN, STDOUT, STDERR都重定向到/dev/null。
?
daemon的實現(xiàn)大致如下:
int daemon( int nochdir,??int noclose )
{
? ?pid_t pid;
? ?if ( !nochdir && chdir("/") != 0 ) //如果nochdir=0,那么改變到"/"根目錄
? ?? ? return -1;
? ?
? ?if ( !noclose ) //如果沒有noclose標志
? ?{
? ??????int fd = open("/dev/null", O_RDWR);?
? ??????if ( fd??<??0 )
? ?? ???????return -1;
?
???????/*?重定向標準輸入、輸出、錯誤 到/dev/null,
鍵盤的輸入將對進程無任何影響,進程的輸出也不會輸出到終端
*/
dup(fd, 0);
dup(fd, 1);
dup(fd, 2);??? ?
close(fd);
}
? ?pid = fork();??//創(chuàng)建子進程.
? ?if (pid??<??0)??//失敗
? ????return -1;
? ?if (pid > 0)
? ?????_exit(0); //返回執(zhí)行的是父進程,那么父進程退出,讓子進程變成真正的孤兒進程.
//創(chuàng)建的?daemon子進程執(zhí)行到這里了
? ?if ( setsid()??< 0 )???//創(chuàng)建新的會話,并使得子進程成為新會話的領(lǐng)頭進程
? ??? return -1;
? ?return 0;??//成功創(chuàng)建daemon子進程
}
?
使用實例:
int main()
{
????daemon(1, 1);?//參數(shù)根據(jù)需求確定
????/*??在這里添加你需要在后臺做的工作代碼??*/
}
如何殺死這樣的進程:
通過ps+grep找到對應(yīng)的后臺進程,使用kill命令將進程殺死;也可創(chuàng)建shell腳本對進程的啟動、關(guān)閉、重啟進行自動管理,參考下文:
http://blog168.chinaunix.net/space.php?uid=20196318&do=blog&id=28824
總結(jié)
以上是生活随笔為你收集整理的Linux:守护进程详解及实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux select shell,l
- 下一篇: Linux elf文件分析