linux下的deamon进程
来源:互联网 发布:ff14龙女主角捏脸数据 编辑:程序博客网 时间:2024/05/22 00:51
设计一个linux下的deamon进程,关键只有几个:
1.fork两次。
2.fork第一次和第二次之间成为进程组头。
3.改变工作目录。
4.忽略信号。
5.设置读写掩码。
一下是一个从网络搜集到的例程,非常好的演示了上述要点,存此备忘。
#include
#include
#include
#include
void main(int argc, char ** argv)
{
time_t now;
int childpid, fd, fdtablesize;
int error, in, out;
/*忽略终端 I/O信号,STOP信号*/
signal(SIGTTOU,SIG_IGN);
signal(SIGTTIN,SIG_IGN);
signal(SIGTSTP,SIG_IGN);
signal(SIGHUP,SIG_IGN);
/*父进程退出,程序进入后台运行*/
if( fork()!=0 )
{
exit(1);
}
if( setsid()<0 )
{
exit(1); /*创建一个新的会议组*/
}
/*子进程退出,孙进程失去控制终端了*/
if( fork()!=0 )
{
exit(1);
}
if( chdir("/tmp")==-1 )
{
exit(1);
}
/*关闭打开的文件描述符,包括标准输入、标准输出和标准错误输出*/
fd=0;
for(fdtablesize=getdtablesize(); fd< fdtablesize;fd++)
{
close(fd);
}
umask(0);/*重设文件创建掩码*/
signal(SIGCHLD,SIG_IGN);/*忽略SIGCHLD信号*/
/*此处,可以做自己想做的服务例程代码。一般是一个死循环,如果要可以控制的退出的话,可以设置获取信号。下面示例一下一个写log的例程
*/
/*写log,测试结果*/
syslog(LOG_USER|LOG_INFO,"守护进程测试!/n");
while(1)
{
time(&now);
syslog(LOG_USER|LOG_INFO,"当前时间:/t%s/t/t/n",ctime(&now));
sleep(6);
}
}
上述程序在gcc4.0.1下编译通过,在fc4-2.6.11下稳定运行。
syslog将连接syslogd这个服务,在/var/log/message这个文件里面输出消息,所以需要启动syslogd服务。否则在/var/log/message这个文件里面不会有显示。
1.fork两次。
2.fork第一次和第二次之间成为进程组头。
3.改变工作目录。
4.忽略信号。
5.设置读写掩码。
一下是一个从网络搜集到的例程,非常好的演示了上述要点,存此备忘。
#include
#include
#include
#include
void main(int argc, char ** argv)
{
time_t now;
int childpid, fd, fdtablesize;
int error, in, out;
/*忽略终端 I/O信号,STOP信号*/
signal(SIGTTOU,SIG_IGN);
signal(SIGTTIN,SIG_IGN);
signal(SIGTSTP,SIG_IGN);
signal(SIGHUP,SIG_IGN);
/*父进程退出,程序进入后台运行*/
if( fork()!=0 )
{
exit(1);
}
if( setsid()<0 )
{
exit(1); /*创建一个新的会议组*/
}
/*子进程退出,孙进程失去控制终端了*/
if( fork()!=0 )
{
exit(1);
}
if( chdir("/tmp")==-1 )
{
exit(1);
}
/*关闭打开的文件描述符,包括标准输入、标准输出和标准错误输出*/
fd=0;
for(fdtablesize=getdtablesize(); fd< fdtablesize;fd++)
{
close(fd);
}
umask(0);/*重设文件创建掩码*/
signal(SIGCHLD,SIG_IGN);/*忽略SIGCHLD信号*/
/*此处,可以做自己想做的服务例程代码。一般是一个死循环,如果要可以控制的退出的话,可以设置获取信号。下面示例一下一个写log的例程
*/
/*写log,测试结果*/
syslog(LOG_USER|LOG_INFO,"守护进程测试!/n");
while(1)
{
time(&now);
syslog(LOG_USER|LOG_INFO,"当前时间:/t%s/t/t/n",ctime(&now));
sleep(6);
}
}
上述程序在gcc4.0.1下编译通过,在fc4-2.6.11下稳定运行。
syslog将连接syslogd这个服务,在/var/log/message这个文件里面输出消息,所以需要启动syslogd服务。否则在/var/log/message这个文件里面不会有显示。
- linux下的deamon进程
- linux下的deamon进程
- linux下的deamon进程
- linux下的deamon进程
- linux 下编写 deamon 进程方式
- Linux Deamon(守护进程)实现方法
- Linux System Programming读书笔记之deamon进程
- Linux进程间的通信——有名管道fifo与守护进程deamon
- deamon(守护进程)的实现
- 将jboss配置为linux(RedHat9.0)deamon进程的方法
- linux deamon中常使用的pid file
- 关于守护进程deamon
- 03.deamon进程
- python 守护进程deamon
- deamon守护进程
- Linux Deamon编程方法
- Linux Deamon编程方法
- Linux Deamon编程方法
- as
- 革命尚未成功,同志仍需努力
- 通过smtp服务器身份验证
- 机器搜索引擎 vs 人肉搜索引擎(作者:胡宝介)
- struts2.0 整合tiles 配置
- linux下的deamon进程
- 好累呀
- 社会化搜索=社区≠社区搜索(麦田)
- 哈哈。终于找到问题了。写错方法了。呵呵
- web2(wm)修改之——模板
- 内存中直接建立索引: Lucene 建索引效率(litertiger)
- 什么是Ajax?
- 5个最重要的AJAX安全提示
- PHP实现windows风格的树型菜单