linux 编写服务程序
来源:互联网 发布:java 多线程 ftp上传 编辑:程序博客网 时间:2024/06/13 05:11
以前我们在看《unix环境高级编程》的时候,有专门的整章详细介绍如何编写一个后台daemon程序(精灵程序),主要涉及到创建会话组,切换工作目录,设置文件屏蔽字,关闭不必要的描述符等多个操作。这些操作对于每一个后台程序来说都是类似的。
在Linux中专门提供了一个函数来完成这个daemon化的过程,这个函数的原型如下
int daemon (int __nochdir, int __noclose);
如果__nochdir的值为0,则将切换工作目录为根目录;如果__noclose为0,则将标准输入,输出和标准错误都重定向到/dev/null。
经过这个函数调用后的程序将运行在后台,成为一个daemon程序,而linux下大多的服务都是以此方式运行的。
我们来看一个简单的例子。例如编写例子程序test.c
#include <unistd.h>#include <stdio.h> int do_sth(){ //Add what u want
printf("hello/n"); return 0;}int main(){ daemon(0,0); while ( 1 ) { do_sth(); sleep(1); }}
编译并运行:
whc@ubuntu:~/test$ gcc -Wall test.c -o www
whc@ubuntu:~/test$ ./www
程序进入后台,通过ps查看进程情况,可以看到进程的父进程的id为1,即为init进程
whc@ubuntu:~/test$ ps -elf | grep www
5 S www-data 20173 6295 0 80 0 - 6038 - 05:04 ? 00:00:00 /usr/sbin/apache2 -k start
1 S whc 26721 1 0 80 0 - 390 - 10:14 ? 00:00:00 ./www
0 R whc 26752 26657 0 80 0 - 805 - 10:15 pts/4 00:00:00 grep www
用lsof查看www进程所打开的文件,可以看到文件描述符0,1,2都被重定向到/dev/null
whc@ubuntu:~/test$ /usr/bin/lsof -p 26721
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
www 26721 whc cwd DIR 8,1 4096 2 /
www 26721 whc rtd DIR 8,1 4096 2 /
www 26721 whc txt REG 8,3 6491 101021 /home/whc/weihua_work/守护进程/www
www 26721 whc mem REG 8,1 1364388 458293 /lib/tls/i686/cmov/libc-2.7.so
www 26721 whc mem REG 8,1 109152 432499 /lib/ld-2.7.so
www 26721 whc 0u CHR 1,3 6448 /dev/null
www 26721 whc 1u CHR 1,3 6448 /dev/null
www 26721 whc 2u CHR 1,3 6448 /dev/null
并且能后看到,进程的当前工作目录(cwd)为根目录 '/',daemon函数已经帮助我们完成了daemon化的过程接下来我们只需关注程序功能的实现就可以了
- linux 编写服务程序
- 编写 Window 服务程序
- 编写后台服务程序
- 编写服务程序步骤
- 编写服务程序步骤
- 服务程序编写
- 编写 Windows 服务程序
- 编写NT服务程序
- C# 编写服务程序
- wince 编写服务程序
- C++编写服务程序
- windows 服务程序编写
- Windows服务程序编写
- wince 编写服务程序
- Delphi 服务程序编写
- Windows服务程序编写
- wince 编写服务程序
- 编写windows服务程序
- proc 文件系统
- html中保留字的问题
- 信息论与算法复杂度
- Emacs 快捷键
- opencv 读取摄像头
- linux 编写服务程序
- arcgis silverlight 查询实现点闪耀
- shell读取文件的指定行字符串
- 实现文本框的联想功能(类似邮件的收件人)
- EVC串口通信编程【转】
- 基于单元格的AOI(Area of Interest)算法简析
- Silverlight 通信WCF 服务器Web.Config 配置
- RedHat AS4 下安装oracle10g
- 自定义控件的开发