Linux守护进程加上发送信号固定模式
2016-07-10 10:28
483 查看
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <sys/wait.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/stat.h> #include <sys/shm.h> #include <ctype.h> #include <errno.h> int singnal1(int signo, void (*func)(int)) { struct sigaction act, oact; act.sa_handler = func; sigemptyset(&act.sa_mask); act.sa_flags = 0; return sigaction(signo, &act, &oact); } void setdaemon() { pid_t pid, sid; pid = fork(); if (pid < 0) { exit(EXIT_FAILURE); } if (pid > 0) { exit(EXIT_SUCCESS); } if ((sid = setsid()) < 0) { printf("setsid failed %s\n", strerror(errno)); exit(EXIT_FAILURE); /*chdir("/"); umask(0); close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO);*/ } } void listenfifo() { const char *sfifoname = "fifo1"; int len = 0; char buf[128]; memset(buf, 0, sizeof(buf)); int fd = open(sfifoname, O_RDONLY);//打开fifo管道文件 if (fd == -1) { printf("open %s failed, %s\n", sfifoname, strerror(errno)); } len = read(fd, buf, sizeof(buf)); // 进程阻塞,直到数据来了才返回 if (len > 0) { if (buf[strlen(buf) - 1] == '\n') { buf[strlen(buf) - 1] = 0; } close(STDOUT_FILENO); open(buf, O_WRONLY); } close(fd); } void catch_Signal(int Sign) { switch (Sign) { case SIGINT: listenfifo(); break; } } int main(void) { setdaemon();//吧进程设置为daemon状态 singnal1(SIGINT, catch_Signal);//捕捉int信号 while (1) { puts("!!!Hello World!!!"); sleep(1); } return EXIT_SUCCESS; }
相关文章推荐
- Linux学习----vim编辑器
- linux启动mysql
- Java千百问_02基本使用(013)_linux系统如何管理环境变量
- linux关于readlink函数获取运行路径的小程序
- linux xfs和ext4的区别
- 图解Linux命令之--cmp命令
- Linux命令(004) -- watch
- centos7和centos6的区别
- Linux Eclipse之Android NDK
- Linux Eclipse之Android NDK
- Linux Eclipse之Android NDK
- Linux Eclipse之Android NDK
- Linux运维经验分享与思路
- 虚拟机下CentOS 6.5配置IP地址的三种方法
- Linux mint 下安装配置 LNMP
- Linux下MakeFile文件
- centOs安装jdk1.7
- 如何编写自己的Linux安全检查脚本?
- 进程间通信(IPC)之信号量
- 卸载Centos自带open-jdk