📄 389.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="390.htm">下一篇</a>]
<hr><p align="left"><small>发信人: guru ( Darkness), 信区: UNP <br>
标 题: 一个简单的DAEMON <br>
发信站: UNIX编程 (2001年07月15日19:38:28 星期天), 站内信件 <br>
<br>
#include <stdio.h> <br>
#include <sys/types.h> <br>
#include <sys/stat.h> <br>
#include <fcntl.h> <br>
#include <unistd.h> <br>
#include <signal.h> <br>
int daemon_init(void) <br>
{ <br>
int fd,i; <br>
if ( fork()!= 0) <br>
exit(1); <br>
//在fork()后,已保证调用setsid()的进程非组长进程,可以成功调用setsid() <br>
//此时:1.创建了新session。2.没有了控制终端。3.进程为session leader <br>
// & group leader. <br>
:看AUPE的时候,进程组,session就一直模糊不清,总觉得无法得到直观 <br>
:的概念,而且好象也无法写什么小程序来明晰概念,现在也如此。:( <br>
:刚看到LINUXFORUM上的帖子: <br>
>>>>>>>>>>>>>>>>>>>>>>> <br>
Linux 环境下的程序设计 <br>
>> Linux 综合编程 Thread views: 142 <br>
opera <br>
(addict) <br>
07/16/01 10:00 AM <br>
个人的一点理解, 仅供参考. [re: DLHFOREVER] <br>
session号描述进程对终端(tty)的依赖关系, 当具有某个session号终端挂起时, 具有同 <br>
一session号的所有进程会收到SIGHUP信号. <br>
作业控制是shell将终端的当前控制权在同一session内的不同的进程组(pgrp)之间切换 <br>
的过程, 当终端产生作业控制信号时(如SIGINT, SIGQUIT, SIGSTOP), 只作用于终端的 <br>
当前控制进程组. <br>
>>>>>>>>>>>>>>>>>>>>>>>>>>>> <br>
setsid(); <br>
// setpgid(getpid(),0);---想将进程ID设为进程组ID <br>
signal(SIGHUP,SIG_IGN); <br>
if ( fork()!=0) <br>
exit(1); <br>
chdir("/"); <br>
umask(0); <br>
fd=creat("/home/guru/daemon.log",O_RDWR); <br>
write(fd,"hello",6); <br>
close(fd); <br>
//简单的关闭从父进程继承来的文件描述符。 <br>
//UNP中说最大文件描述符很难确定,这个简单的DAEMON可以确定 <br>
//最大描述符即为2--手工执行daemon时,shell打开的0,1,2。 <br>
for(i=0;i<3;i++) <br>
close(i); <br>
sleep(120); <br>
return; <br>
} <br>
<br>
int <br>
main() <br>
{ <br>
daemon_init(); <br>
} <br>
/* <br>
命令行方式执行:./daemon. <br>
1.用户退出后,再次登录,程序仍然在执行。 <br>
2. ps -avx: tty栏显示?--程序没有控制终端。 <br>
:3.但是,我却无法打开记录文件---daemon.log,显示 <br>
:处错信息:permission denied. <br>
:why? <br>
*/ <br>
:参考本版22,95文及UNP《守护进程和xinetd》一章, <br>
:还有redp0wer的SDD源程序,不过还没有把守护进程内容 <br>
:彻底弄清楚。 <br>
-- <br>
telnet apue.dhs.org 2323 or http://apue.dhs.org <br>
APUE:UNIX环境编程 <br>
UNP:UNIX网络编程 <br>
UKP:UNIX内核编程 <br>
BIBLE:高手传经 <br>
FTPDOC:资源共享 <br>
※ 修改:·guru 於 07月21日12:37:24 修改本文·[FROM: 202.114.36.231] <br>
※ 来源:·UNIX编程 www.tiaozhan.com/unixbbs/·[FROM: 202.114.36.210] <br>
</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="314.htm">上一层</a>][<a href="390.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 + -