linux 特殊进程(守护进程)

##特殊进程讲解##守护进程
	* 后台运行着,避免被打断
	* 调用 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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值