Chinaunix首页 | 论坛 | 博客
  • 博客访问: 366604
  • 博文数量: 50
  • 博客积分: 1495
  • 博客等级: 上尉
  • 技术积分: 805
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-21 14:19
文章分类

全部博文(50)

文章存档

2011年(47)

2010年(3)

分类: LINUX

2011-04-12 19:07:07

013_精灵程序

 

1) 精灵进程

精灵进程(daemon)又被称为守护进程,是生存期长的一种进程。常常在系统引导装入时启动,在系统关闭时终止。它们没有控制终端,在后台运行。

所有精灵进程都超级用户的优先权运行。

所有这些精灵基础的副进程都是init进程。

 

2) 编写精灵进程规则

在编写Daemon时需要遵循一些基本规则,以便防止产生并不希望的交互作用。

a)首先做的是调用fork,然后使副进程exit

      i. 如果该精灵进程是由一条简单shell指令启动的,那么使父进程终止使得shell认为这条命令已经执行完成;

      ii.子进程继承了父进程的进程组ID,但具有一个新的进程ID,这就保证了子进程不是一个进程组的手进程。这对于下面就要做的setsid调用时必要的前提条件。

b) 调用setsid创建一个新对话期,使得调用进程:

       i.成为新对话期的首进程;

       ii. 成为一个新进程组的首进程;

       iii.没有控制终端。

c) 将当前工作目录更改为根目录

d) 将文件方式创建屏蔽字设置为0,也就是掩码设置为0

e) 关闭不再需要的文件描述符。

 

精灵进程程序:

  1. int daemon_init(void)

  2. {

  3.     pid_t pid;

  4.     int i;

  5.  

  6.     if ((pid = fork()) < 0)

  7.         return -1;

  8.     else if (pid != 0)

  9.         exit(0); /* ending parent process */

  10.  

  11.     /*child go on*/

  12.     setsid(); /* become session leader */

  13.     chdir("/"); /* change working directory */

  14.     umask(0); /* clear our file mode creation mask */

  15.     for (i=0; i <= getdtablesize(); i++) /* getdtablesize() get the max of file descript*/

  16.         close(i); /* close all file descript */

  17.     return 0;

  18. }

 

运行之后可以用 ps –efjc | grep my_daemon查看是否成功。

  1. UID PID PPID PGID SID CLS PRI STIME TTY TIME CMD

  2. cjok 8310 1 8310 8310 TS 19 02:15 ? 00:00:19 ./my_daemon

父进程是init ID 1,无终端。

 

 水平有限,如果有错误的地方,请指正,thanks

cjok.liao@gmail.com


阅读(1930) | 评论(0) | 转发(0) |
0

上一篇:010_信号

下一篇:008_进程控制-02

给主人留下些什么吧!~~