您所在的位置:读书频道 > 操作系统 > Linux > 8.2.2 守护进程具体实现

8.2.2 守护进程具体实现

2007-11-07 16:52 杜华 人民邮电出版社 字号:T | T
一键收藏,随时查看,分享好友!

《Linux编程技术详解》第8章的主要内容是守护进程,本小节讲的是守护进程具体实现。

AD:

8.2.2  守护进程具体实现

本节给出一个守护进程创建的实例。程序p8.1.c中定义了daemon函数,用于实现对守护进程的创建。其创建思想在8.2.1中有详细的介绍,程序的具体代码如下:

    

//p8.1.c 守护进程的实现
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

/* daemon函数用于将调用函数的进程转化为守护进程 */
int
daemon (int nochdir, int noclose)
{
pid_t pid;

pid = fork ();

/* 如果创建进程失败 */
if (pid < 0)
{
perror ("fork");
return -1;
}

/* 父进程退出运行 */
if (pid != 0)
exit (0);

/* 成为会话领头进程 */
pid = setsid();

if (pid < -1)
{
perror ("setsid");
return -1;
}

/* 将工作目录修改成根目录 */
if (! nochdir)
chdir ("/");

/* 将标准输入输出重定向到空设备 */
if (! noclose)
{
int fd;

fd = open ("/dev/null", O_RDWR, 0);
if (fd != -1)
{
dup2 (fd, STDIN_FILENO);
dup2 (fd, STDOUT_FILENO);
dup2 (fd, STDERR_FILENO);
if (fd > 2)
close (fd);
}
}

umask (0027);

return 0;
}

int main(void)
{
daemon(0,0);
sleep(1000);

return 0;

使用gcc编译p8.1.c,得到名为p8.1的可执行文件。执行该程序,程序将以守护进程的状态运行,如图8.4所示。

 

图8.4  守护进程的实现

【责任编辑:杜书 TEL:(010)68476606】

回书目   上一节   下一节

分享到:

Linux系统故障排查技巧

对于一名Linux系统管理人员来说,系统故障问题或多或少会出现,[详细]

  1. Linux服务器配置全程实录
  2. 揭秘--优秀PPT这样制作

热点职位

更多>>

热点专题

更多>>

读书

《网管员必读——网络管理》
本书在全面介绍微软最新网络操作系统Windows Server 2003的基础上,简要地介绍了UNIX和Linux两大操作系统的代表产品:Sun(太阳

51CTO旗下网站

领先的IT技术网站 51CTO 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i 51CTO学院