目录
- 守护进程
- daemon()函数
- 系统日志
- openlog(),syslog()与closelog()函数
守护进程
在Linux下进行编程时,程序运行时往往会占用终端,因此经常需要让程序进入后台运行,Linux命令中存在使程序后台运行的指令,在命令后加上&(后台运行符)可以让该命令后台运行,如make &
,不过以这种方式让程序进入后台运行只是一种假象,程序仍然依赖终端(terminal)程序,即以这种方式后台运行的程序仍是terminal的子进程,因此,当终端被关闭时该程序也随之终止,那有没有真正不依赖于终端存在的后台运行的进程呢
这种进程就是守护进程(daemon进程)又称精灵进程,因为它就像精灵一样隐匿于角落难以捕获。daemon程序通常作为服务进程使用,
守护进程一旦脱离了终端,退出就成了问题,这时需要需要使用ps命令查出进程ID后再使用kill命令停止
那么如何在编程时使程序成为daemon进程进入后台运行呢,这就需要用到daemon()函数
daemon()函数
- daemon()函数简介
daemon()函数原型及所需头文件如下
#include <unistd.h>
int daemon(int nochdir, int noclose);
daemon()函数原型很简单,只有两个参数
- 第一个参数nochdir即not change
directory的缩写,用来判断是否切换当前工作路径到“/”目录,赋值为“0”时切换工作路径到“/“目录;赋值为1时则不会改变 - 第二个参数noclose用来指定是否关闭标准输入,标准输出和标准出错(即重定向到/dev/null),传0时为关闭;传1时则不关闭
daemon()函数的两个参数通常都传0
系统日志
syslog是- 种工业标准的协议,可用来记录设备的日志。在UNIX系统,路由器、交换机等网络设备中,系统日志(System
Log)记录系统中任何时间发生的大小事件。管理者可以通过查看系统记录,随时掌握系统状况。UNIX的系统日志是通过syslogd这个进程记录系统有关事件记录,也可以记录应用程序运作事件。通过适当的配置,我们还可以实现运行syslog协议的机器间通信,通过分析这些网络行为日志,藉以追踪掌握与设备和网络