linux daemon 系统调用
2015-09-06 15:09
483 查看
int daemon(int nochdir, int noclose);
daemon 函数主要用于希望脱离控制台,以守护进程形式在后台运行的程序。
当 nochdir 为 0 时, daemon 将更改进程的根目录为 root 目录( / 目录)
当 noclose 为 0 时, daemon 将进程的 STDIN , SDTERR 都重定向到 /dev/null 。
daemon 大致实现如下:
daemon 函数主要用于希望脱离控制台,以守护进程形式在后台运行的程序。
当 nochdir 为 0 时, daemon 将更改进程的根目录为 root 目录( / 目录)
当 noclose 为 0 时, daemon 将进程的 STDIN , SDTERR 都重定向到 /dev/null 。
daemon 大致实现如下:
int daemon( int nochdir, int noclose ) { pid_t pid; if ( !nochdir && chdir("/") != 0 ) //如果nochdir=0,那么改变到"/"根目录 return -1; if ( !noclose ) //如果没有noclose标志 { int fd = open("/dev/null", O_RDWR); if ( fd < 0 ) return -1; /* 重定向标准输入、输出、错误 到/dev/null, 键盘的输入将对进程无任何影响,进程的输出也不会输出到终端 */ dup(fd, 0); dup(fd, 1); dup(fd, 2); close(fd); } pid = fork(); //创建子进程. if (pid < 0) //失败 return -1; if (pid > 0) _exit(0); //返回执行的是父进程,那么父进程退出,让子进程变成真正的孤儿进程. //创建的 daemon子进程执行到这里了 if ( setsid() < 0 ) //创建新的会话,并使得子进程成为新会话的领头进程 return -1; return 0; //成功创建daemon子进程 }使用实例:
int main() { daemon(1, 1); //参数根据需求确定 /* 在这里添加你需要在后台做的工作代码 */ }
相关文章推荐
- Linux终端设置代理
- linux gcc过程
- linux设置时间为24小时制,设置时区
- inode是什么--linux
- Linux下开启/关闭防火墙命令
- Centos SELinux安全策略
- (转) 如何取消Linux下,vi中显示的^M符号
- 马哥-51CTO-Linux培训-0830
- 新手指南: Linux 新手应该知道的 26 个命令
- 保留端口
- CentOS 5.1下跑Mono和Asp.net的实现方法
- Linux守护进程的编程实现
- Linux磁盘分区管理(转载)
- ls命令--linux
- 使用yum快速升级CentOS 6.5内核到 3.10.28
- linux命令学习
- linux的特殊权限(转载)
- Linux -RAID
- Linux安装JDK1.6 rpm.bin格式的安装配置
- CentOS上常用的命令汇总