当前位置:  技术问答>linux和unix

谁能我帮解释解释daemon 函数具体步骤的意思

    来源: 互联网  发布时间:2016-05-17

    本文导语:  我是菜鸟啊,网上有很多daemon的写法,我随便贴个 int daemon_init() { int i; pid_t pid; if( (pid = fork())==-1) { ERR_LOG("fork error"); return -1; } if ( pid != 0) exit(0); /* parent terminates 主进程中止,下面的怎么执行下...

我是菜鸟啊,网上有很多daemon的写法,我随便贴个

int daemon_init()
{
int i;
pid_t pid;

if( (pid = fork())==-1)
{
ERR_LOG("fork error");
return -1;
}
if ( pid != 0)
exit(0); /* parent terminates 主进程中止,下面的怎么执行下去的*/

/* 41st child continues */

setsid(); /* become session leader 什么意思,为什么这么做*/

signal(SIGHUP, SIG_IGN);                 /*什么意思,为什么这么做*/

chdir("/"); /* change working directory *什么意思,为什么这么做,这个很意思,这行去掉,daemon状态下,打印日志才能打印,否则打印不出来,查了下,说把路径给改变了*/

umask(0); /* clear our file mode creation mask 什么意思,为什么这么做*/

close((int)STDIN_FILENO);               /*什么意思,为什么这么做*/
close((int)STDOUT_FILENO);               /*什么意思,为什么这么做*/
close((int)STDERR_FILENO);                 /*什么意思,为什么这么做*/

return 0;
}


|
在编写精灵进程程序时需遵循一些基本规则,以便防止产生并不希望的交互作用。下面先
说明这些规则,然后是一个按照规则编写的函数d a e m o n _ i n i t。

(1) 首先做的是调用f o r k,然后使父进程e x i t。这样做实现了下面几点:第一,如果该精灵
进程是由一条简单s h e l l命令起动的,那么使父进程终止使得s h e l l认为这条命令已经执行完成。
第二,子进程继承了父进程的进程组I D,但具有一个新的进程I D,这就保证了子进程不是一个
进程组的首进程。这对于下面就要做的s e t s i d调用是必要的前提条件。

(2) 调用s e t s i d以创建一个新对话期。于是执行9 . 5节中列举的三个操作,使调用进程:(a)
成为新对话期的首进程,(b)成为一个新进程组的首进程,(c)没有控制终端。

(3) 将当前工作目录更改为根目录。从父进程继承过来的当前工作目录可能在一个装配的
文件系统中。因为精灵进程通常在系统再引导之前是一直存在的,所以如果精灵进程的当前工
作目录在一个装配文件系统中,那么该文件系统就不能被拆卸。
另外,某些精灵进程可能会把当前工作目录更改到某个指定位置,在此位置做它们的工作。
例如,行式打印机假脱机精灵进程常常将其工作目录更改到它们的s p o o l目录上。

(4) 将文件方式创建屏蔽字设置为0。由继承得来的文件方式创建屏蔽字可能会拒绝设置某
些许可权。例如,若精灵进程要创建一个组可读、写的文件,而继承的文件方式创建屏蔽字,
屏蔽了这两种许可权,则所要求的组可读、写就不能起作用。

(5) 关闭不再需要的文件描述符。这样使精灵进程就不再持有从其父进程继承来的某些文
件描述符(父进程可能是s h e l l进程,或某个其他进程)。但是,究竟关闭哪些描述符则与具体
的精灵进程有关,所以在下面的例子中不包含此步骤。

int daemon_init() 

int i; 
pid_t pid; 

if( (pid = fork())==-1) 

ERR_LOG("fork error"); 
return -1; 

if ( pid != 0) 
exit(0); /* 主进程中止没有错,但if不是还有else吗?else中就是有两种情况pid>0就是子进程

    
 
 

您可能感兴趣的文章:

  • C++ STL Bitsets构造函数及成员函数解释及代码示例
  • c语言也能重载函数? 怎么解释。unix编程的open函数。
  • 请解释函数strtok()
  • 请教高人来解释一下小弟关于poll()函数的疑惑
  • 江湖救急:谁能帮我解释一下这个函数?
  • 关于getenv库函数,请解释,谢谢
  • 谁能给我解释一下SIGNAL这个函数呀?
  • 哪位兄台能为我解释一下inline函数??
  • 请那位高手详细解释一下wait函数的用法和意义?
  • 谁给解释下这个signal函数
  • 这里放一个signal函数怎么解释(附源码)
  • 哪位大仙能给解释一下uart_insert_char()函数的用法
  • 有谁来解释下waitpid函数中 pid的值为-1和0的区别
  • 请解释一下:assert()这个函数,详细点 高分相送
  • 哪位高手可以解释一下为什么Linux下的socket函数recv(),不被信号中断掉?
  • 内核编程遇到回调函数,实在看不明白,哪位高手帮忙看看解释下,跪谢。
  • linux的主函数一般是int main(int argc,char *argv[])麻烦解释
  • struct task_struct * get_current(void)函数的解释--help!!
  • 给详细解释一下可重入函数、线程安全函数、异步信号安全函数
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • CentOS安装Telnet,以root用户登陆Telnet以及CentOS的各种终端解释
  • classpath里的.;到底有什么用?能解释解释吗?
  • 请问java的xml解释器有哪些?怎么能在applet里用这些解释器?
  • 大虾们给我解释解释这个输出问题。这里小弟先谢了。
  • 实在是不能理解,谁能帮我解释解释!
  • 能不能帮我解释解释什么是EJB?
  • 关于"symbol lookup error"问题的诡异现象,高手帮忙解释解释
  • alex 解释器 alexinterpreter
  • 地震解释软件系统 OpendTect
  • Java源代码解释器 Beanshell
  • 这个"."怎么解释?
  • 高手帮忙解释
  • 请详细解释javamail里的“收件人类型”的CC,TO,BCC的意义???
  • 有谁来解释下waitpid函数中 pid的值为-1和0的区别 iis7站长之家
  • 多线程的例子。但是不知道为什么看不懂。唉,笨:(各们帮帮忙了给我解释解释
  • 数字电视CA卡解释模块 OSCam
  • markdonw解释器 sundown
  • Brainfuck编译器和JIT解释器 bfc
  • Scheme Lisp 解释器 Subs
  • MQ错误码解释工具 MQRC2
  • AIML解释器 program-o


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3