##特殊进程讲解##守护进程
* 后台运行着,避免被打断
* 调用 umask(0)文件屏蔽集
* 调用fork
* 设置新会话,信号
* 更改工作目录到跟目录
* dup2复制句柄
##系统守护进程
* 网上查找
*
*
* 杀死进程,kill 进程ID
* 查看进程,ps -a
* 进入cd /etc/xinetd.d
* 创建一个文件 touch+文件名
*
* 输入service xinetd start 开启
* #$lsof -i:8000监控
* $service xinetd stop 停止
##日志进程
* $ps -aux|grep syslogd 查看日志进程
* 自行进行日志的文件创建 添加 管理
* 使用日志守护进程ps -aux|grep syslogd 查看系统打开没有
* 通过修改syslog的配置文件进行日志守护
* $cat /etc/rsyslog.conf
* $cd /var/log 各种日志
*
* openlog 进程名字,操作属性LOG_PID 日志中包含当前进程PID ,打印在哪
* LOG_KERN / var/log 里面
* $man syslog
*
* argv[0] 当前进程
*
* 把这些信号忽略掉。
*
*
查看是否在运行
*
/var/log/syslog:它和/etc/log/messages日志文件不同,它只记录警告信息,常常是系统出问题的信息。
/var/log/messages:包括整体系统信息,其中也包含系统启动期间的日志。此外,还包括mail,cron,daemon,kern和auth等内容。
/var/log/user.log:记录所有等级用户信息的日志。
/var/log/auth.log:包含系统授权信息,包括用户登录和使用的权限机制等。
/var/log/daemon.log:包含各种系统后台守护进程日志信息。
/var/log/kern.log:包含内核产生的日志,有助于在定制内核时解决问题。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
#include <sys/syslog.h>
#include <sys/param.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
int init_daemon(const char *pname,int facility)
{
int pid;
int i;
/*忽略可能的终端信号*/
signal(SIGTTOU,SIG_IGN);
signal(SIGTTIN,SIG_IGN);
signal(SIGTSTP,SIG_IGN);
signal(SIGHUP,SIG_IGN);
//创建子进程,父进程推出
if( (pid=fork()))
exit(EXIT_SUCCESS);//是父进程,结束父进程,子进程继续
else if(pid < 0)//创建失败
{
perror("fork error!\n");
exit(EXIT_FAILURE);
}
setsid();//设置新会话组长,脱离终端
for(i=0;i<NOFILE;i++)
close(i);
open("/dev/null",O_RDONLY);//以只读方式打开文件 0 标准输出
open("/dev/null",O_RDWR);//以读写方式打开文件 1 标准输入
open("/dev/null",O_RDWR);//以读写方式打开文件 2 标准输出错误
chdir("/");
umask(0);
signal(SIGCHLD,SIG_IGN); //信号
//pname日志文件 ,由绝对路径指出的文件名,此文件必须事先建立
openlog(pname,LOG_PID,facility);
return 0;
}
int main(int argc,char *argv[])
{
time_t ticks;
init_daemon(argv[0],LOG_KERN);//argv[0]文件进程exe文件
while(1)
{
sleep(1);
ticks = time(NULL); //读取当前时间
syslog(LOG_INFO,"%s",asctime(localtime(&ticks)));//写日志信息 到LOG_INFO文件中
}
return 0;
}