秀杰空间

  • 首页
  • 心情笔记
  • Linux/Unix C/C++
  • PHP
  • 我的项目
秀杰笔记
做些有意义的事情
  1. 首页
  2. Linux/Unix C/C++
  3. 正文

UNIX环境高级编程学习之第十三章守护进程 - 初始化一个守护进程

2016年9月7日 924点热度 0人点赞 0条评论

UNIX环境高级编程学习之第十三章守护进程 - 初始化一个守护进程
[code lang="cpp"]/* Data: 20100805
* User: lixiujie
* Desc: 初始化守护进程
* gcc daemon.c -o MyDaemon
*/
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
#include <time.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <syslog.h>
/* 创建守护进程函数 */
int daemonize(){
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() == -1) exit(1);
/* 防止会话组长重新申请控制终端,子进程退出,孙进程没有控制终端了 */
if (fork()!=0)exit(1);
/* 关闭打开的文件描述符,防止资源浪费和防止引起无法预料的错误 */
for (fd = 3, fdtablesize = getdtablesize();fd < fdtablesize;fd++){
close(fd);
}
/* 重定向标准输入/标准输出和标准错误输出 */
error = open("./stderr", O_WRONLY|O_CREAT, 0600);
dup2(error, 2);
close(error);
in = open("./stdin", O_RDONLY|O_CREAT,0600);
dup2(in, 0);
close(in);
out = open("./stdout", O_WRONLY|O_CREAT,0600);
dup2(out, 1);
close(out);
/* 可以改变工作目录 */
/* chdir("/tmp"); */
/* 重设文件创建掩模 */
umask(0);
/* 忽略SIGCHLD信号, 防止僵尸进程 */
signal(SIGCHLD, SIG_IGN);
return 0;
}
int main(void){
time_t now;
daemonize();
openlog("MyMsgDaemon", LOG_CONS | LOG_PID, 0);
syslog(LOG_DEBUG, "守护进程测试/n");
while (1){
time(&now);
syslog(LOG_DEBUG, "守护进程测试, 当前时间:[%s]/n", ctime(&now));
sleep(6);
}
return 0;
}

[/code]

标签: UNIX环境高级编程
最后更新:2016年9月7日

秀杰

做些有意义的事情

点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

秀杰

做些有意义的事情

标签聚合
pb ubuntu zookeeper mac select socket epoll UNIX环境高级编程 protobuf tuxedo 分布式
最新 热点 随机
最新 热点 随机
C++使用protobuf快速入门简明教程 Mac安装Brew(Homebrew)国内镜像源加速 从sockaddr_storage结构中取IP地址和端口 [转载]分布式之数据库和缓存双写一致性方案解析 TPS和QPS的区别和理解 2018最新可靠好用的DNS服务器地址汇总
UNIX环境高级编程学习之第十六章网络IPC:套接字 - 非阻塞的Socket通信EPoll模型(多路复用), 实用Socket通信模板 UNIX环境高级编程学习之第十一章线程-用互斥锁传送安全线程参数 UNIX环境高级编程学习之第四章文件和目录-用C实现Shell中的"ls -l"功能 UNIX环境高级编程学习之第十六章网络IPC:套接字 - 非阻塞的Socket通信Poll模型(多路复用), 实用Socket通信模板 UNIX环境高级编程学习之第十二章线程控制-以分离状态创建线程 XJPHP RESTful : 是一个超轻量的快速开发框架。Light and Fast。
京ICP备11019155号-2

COPYRIGHT © 2023 个人笔记. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang