daemon.c
来源:互联网 发布:mysql my.cnf 路径 编辑:程序博客网 时间:2024/06/16 13:12
daemon.c
#include <unistd.h>#include <signal.h>#include <sys/param.h>#include <sys/types.h>#include <sys/stat.h>#include <errno.h>#include <stdlib.h>#include <stdio.h>#include <stdlib.h>#include <time.h>#include <syslog.h>void init_daemon(void){ int pid; int i; if(pid=fork()) exit(0);//是父进程,结束父进程 else if(pid< 0) exit(1);//fork失败,退出 //是第一子进程,后台继续执行 setsid();//第一子进程成为新的会话组长和进程组长 //并与控制终端分离 if(pid=fork()) exit(0);//是第一子进程,结束第一子进程 else if(pid< 0) exit(1);//fork失败,退出 //是第二子进程,继续 //第二子进程不再是会话组长 for(i=0;i< NOFILE;++i)//关闭打开的文件描述符 close(i); //chdir("/tmp");//改变工作目录到/tmp umask(0);//重设文件创建掩模 return;}void sig_term(int signo){ if(signo==SIGTERM) /*catchedsignalsentbykill(1)command*/ { syslog(LOG_INFO,"log4j-agent program terminated."); closelog(); exit(0); }}int main(int argn, char** argv){ extern int errno; if (argn>1) { init_daemon();//初始化为Daemon openlog("log4j-agent", LOG_PID, LOG_USER); syslog(LOG_INFO, "log4j-agent started."); signal(SIGTERM,sig_term);/*arrangetocatchthesignal*/ char *p[argn + 1]; int j=0; for(j=0; j<argn+1; j++){ p[j] = 0; } int i=1; for(i=1; i<argn; i++){ p[i-1] = argv[i]; } for(j=0; j<argn+1; j++){ printf("%s \n", p[j]); } int ret = execvp(argv[1], p); if (ret<0){ //syslog(LOG_ERR, "execl failed:%s"); fprintf(stderr,"execl failed:%s", strerror(errno)); return -1; } }else{ printf("usage: ./daemon commond [argv] \n"); printf("su as: ./daemon java -jar log4j-agent.jar -f conf/log4j.xml -p 4561 \n"); }}
build
gcc daemon.c -o daemon
Usage:
./daemon java -jar log4j-agent.jar -f conf/log4j.xml -p 4561
You can run any program you want int linux with this ‘daemon’.
0 0
- daemon.c
- daemon
- Daemon
- Daemon
- daemon
- daemon
- daemon
- daemon
- daemon
- daemon
- daemon
- daemon
- Daemon
- Linux C创建守护进程(daemon)及终端相关概念
- daemon.exe
- daemon 函数
- Daemon线程
- Daemon线程
- 黑马程序员--线程
- 正式宣布DXBC2GLSL,HLSL字节码到GLSL的编译器
- metasploit渗透测试笔记(内网渗透篇)
- java面向对象
- hdu5481
- daemon.c
- java面向对象2
- Lesson16 Norm computations
- 黑马程序员——高新技术----枚举及部分JDK新特性
- java面向对象3
- HLSL bytecode to GLSL编译器的第一步
- android中if判断引起的crash
- java面向对象4
- mysql order by注入技巧