⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 392.htm

📁 unix高级编程原吗
💻 HTM
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://apue.dhs.org"><font face="黑体"><big><big>apue</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center">               ● UNIX网络编程                       (BM: clown)                </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p   align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="100" align="center" valign="top"><br><p align="center">[<a href="index.htm">回到开始</a>][<a href="314.htm">上一层</a>][<a href="393.htm">下一篇</a>]
<hr><p align="left"><small>发信人: guru ( Darkness), 信区: unp <br>

标  题: UNIX下守护进程(Daemon)的编写(转载) <br>

发信站: UNIX编程 (2001年06月20日18:19:01 星期三), 站内信件 <br>

  <br>

【 以下文字转载自 APUE 讨论区 】 <br>

【 原文由 lookout 所发表 】 <br>

  <br>

  <br>

UNIX下守护进程(Daemon)的编写 <br>

  <br>

作者:bobdai <br>

  <br>

    UNIX下的网络服务程序,如Web Server,FTP,Telnet一般都是由守护进程(Daemon)来 <br>

实 <br>

现的。守护进程不占用终端,在后台运行。UNIX的守护进程一般都命名为 *d 的形式,如ht <br>

tpd,telnetd等等。其实,守护进程的实现是非常简单的,在我的程序中,我使用一个INIT <br>

_DAEMON宏来实现守护进程的初始化工作,如图2.4所示。第一次调用fork函数,为避免挂起 <br>

控制终端将守护进程放入后台执行。然后调用setsid函数脱离控制终端,登录会话和进程组 <br>

,使该进程成为会话组长,与原来的登录会话和进程组脱离,进程同时与控制终端脱离。进 <br>

程已经成为无终端的会话组长。但它可以重新申请打开一个控制终端。可以通过使进程不再 <br>

成为会话组长来禁止进程重新打开控制终端,这就需要第二次调用fork函数,父进程(会话 <br>

组长)退出,子进程继续执行,并不在拥有打开控制终端的能力。在正在执行的进程中调用 <br>

INIT_DAEMON后 进程将成 <br>



  <br>

#define INIT_DAEMON \ <br>

  <br>

{ \ <br>

  <br>

  if( fork() > 0 ) exit(0); \ <br>

  <br>

  setsid(); \ <br>

  <br>

  if( fork() > 0 ) exit(0); \ <br>

  <br>

} <br>

  <br>

           图 2.4 <br>

  <br>

为守护进程,脱离控制终端进入后台执行。比如,我们的网络服务程序,可以在完成创建套 <br>

接口,绑定套接口,设置套接口为监听模式后,变成守护进程进入后台执行而不占用控制终 <br>

端,这是网络服务程序的常用模式。 <br>

  <br>

  INIT_DAEMON宏只提供了很简单的功能,守护进程一旦脱离了终端,退出就成了问题。我 <br>

目 <br>

前使用 PS 查出进程ID然后 kill 之,笨得实在可以。以后进一步想出一种更好的守护进程 <br>



退出机制,有办法的朋友,请不吝赐教写信给我,我会帖出来的。 <br>

  <br>

  <br>

-- <br>

※ 来源:.UNIX编程WWW apue.dhs.org. [FROM: 202.114.1.117] <br>

-- <br>

※ 转载:·UNIX编程 www.tiaozhan.com/unixbbs/·[FROM: 202.114.36.175] <br>

</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="314.htm">上一层</a>][<a href="393.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</table>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -