linux deamon

http://blog.csdn.net/u013485792/article/details/51507685

http://blog.csdn.net/hepeng597/article/details/9816751

 1 #include <unistd.h>
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 #include <time.h>
 5 #include <signal.h>
 6 #include <sys/param.h>
 7 #include <sys/types.h>
 8 #include <sys/stat.h>
 9
10 void init_daemon(void)
11 {
12     int pid1, pid2;
13     int i;
14     pid1 = fork();
15     if( pid1 < 0 ){
16         fprintf( stderr, "fork failed, process exit\n" );
17         exit(1);//fork失败,退出
18     }else if(pid1){
19         fprintf( stderr, "Child process created, pid = %d\n", pid1 );
20         fprintf( stderr, "parent process exit\n" );
21         exit(0);//是父进程,结束父进程
22     }
23
24     //是第一子进程,后台继续执行
25     if(setsid() == -1){//第一子进程成为新的会话组长和进程组长
26         printf("setsid failed\n");
27         exit(-1);
28     }
29
30     //并与控制终端分离
31     pid2 = fork();
32     if( pid2 < 0 ){
33         fprintf( stderr, "fork failed, process exit\n" );
34         exit(1);//fork失败,退出
35     }else if(pid2){
36         fprintf( stderr, "Child process created, pid = %d, "
37             "create in %d\n", pid2, pid1 );
38         fprintf( stderr, "process %d exit.\n", pid1 );
39         exit(0);//是第一子进程,结束第一子进程
40     }
41
42     //是第二子进程,继续
43     //第二子进程不再是会话组长
44     for(i=0;i< NOFILE;++i)//关闭打开的文件描述符
45         close(i);
46
47     chdir("/tmp");//改变工作目录到/tmp
48     umask(0);
49     //umask(S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);//重设文件创建掩码 mask = arg & 0777
50
51     return;
52 }
53
54
55 int main()
56 {
57     FILE *fp;
58     time_t t;
59     init_daemon();//初始化为Daemon
60
61     while(1){//每隔一分钟向test.log报告运行状态
62         fp = fopen("test.log", "a");
63         if( fp >= 0 ){
64             t = time(NULL);
65             fprintf( fp, "I‘m here at %s\n", asctime(localtime(&t)) );
66             fclose(fp);
67         }
68
69         sleep(60);//睡眠一分钟
70     }
71
72     return 0;
73 }
时间: 2024-09-29 21:02:58

linux deamon的相关文章

创建守护进程步骤与setsid() -- linux deamon进程

原创:http://www.cnblogs.com/mickole/p/3188321.html 一,守护进程概述 Linux Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.它不需要用户输入就能运行而且提供某种服务,不是对整个系统就是对某个用户程序提供服务.Linux系统的大多数服务器就是通过守护进程实现的.常见的守护进程包括系统日志进程syslogd. web服务器httpd.邮件服务器sendmail和数据库服务器mys

linux下mysql提示&quot;mysql deamon failed to start&quot;错误的解决方法

操作系统为centos,网站突然连接不上数据库,于是朋友直接重启了一下服务器.进到cli模式下,执行 service myqsld start 发现还是提示"mysql deamon failed to start"错误信息. # /etc/init.d/mysqld start MySQL Daemon failed to start. Starting mysqld: [FAILED] 查看mysqld的log文件 #less /var/log/mysqld.log 141201

linux之Deamon进程创建及其进程exit,_exit,return之间的区别

Dameon进程又被称做守护进程,一般来说他有以下2个特点: 1.生命周期非常长,一旦启动,一般不会终止,直到系统推出,不过dameon进程可以通过stop或者发送信号将其杀死 2.在后台执行,不跟任何控制终端关联,终端信号比如:SIGINT,SIGQUIT,SIGTSTP,以及关闭终端都不会影响deamon 如何编写Daemon进程,需要遵循以下规则: (1)执行fork()函数,父进程退出,子进程继续 执行这一步,原因有二: ·父进程有可能是进程组的组长(在命令行启动的情况下),从而不能够执

Linux的定时任务

分两种:一次性的定时任务.周期性的定时任务. 一次性的定时任务,又称at定时任务,命令为atd ,这里d是deamon的首字母,守护的意思,指守护进程:其实很多程序都是以d结尾,如httpd.memcached等等. 一般Linux都默认安装了atd服务,可以通过 chkconfig --list | grep at来查看(据说CentOS 7已经改变,需要使用systemctl来查看,自行查找),或者,使用service atd status来查看. 周期性的定时任务,crontab(使用qu

Linux下Nagios的安装与配置[转]

一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知. Nagios原名为NetSaint,由Ethan Galstad开发并维护至今.NAGIOS是一个缩写形式: "Nagios Ain't Gonna Insist On Sainthood" Sainthood 翻译为圣徒

Process Kill Technology &amp;&amp; Process Protection Against In Linux

目录 0. 引言 1. Kill Process By Kill Command 2. Kill Process By Resource Limits 3. Kill Process By Code Injection Into Running Process Via GDB 4. Kill Process By Using Cross Process Virtual Memory Modify 5. Kill Process By Using ptrace To Inject .so 6. P

Linux内核剖析 之 进程简介

1.概念 1.1  什么是进程? 进程是程序执行的一个实例,可以看作充分描述程序已经执行到何种程度的数据结构的汇集. 从内核观点看,进程的目的就是担当分配系统资源(CPU时间,内存等)的实体. 我们熟悉的fork()库函数,它有两种用法: (1).一个父进程希望复制自己,使父子进程执行不同的代码段,常用于网络服务程序. (2).一个进程要执行一个不同的程序,fork()后立即exec(),如shell. 1.2  什么是线程? 有时候,一个进程希望有多个执行流,如一款麻将游戏,三个由电脑控制的人

Linux将服务设置为开机自启动的方法小结

Linux设置为开机自启动的几种方法小结 和Windows一样,Linux也可以将一些服务设置为开机自启动,这样可以避免每次开机都会去打开某一个服带来的麻烦!Linux开机将服务设置为开机自启动的方法大概有一下几种: 一.ntsysv图形界面设置 ntsysv -> NeWT + SysV ,它是使用 newt 库的 SysV 风格的 runlevel 配置工具,Red Hat公司遵循GPL规则所开发的程序,它具有互动式操作界面,您可以轻易地利用方向键和空格键等,开启,关闭操作系统在每个执行等级

利用forever在Linux上实现Node.js项目自启动

在一台计算机上手动跑Node项目简单,node xx.js就搞定了,想让Node项目后台执行,尽管不能直接用node命令搞定,可是在安装了forever这个包以后.还是非常轻松的.只是要是在远程server上构建Node项目.假设没法自启动.一旦server重新启动,那么项目必须通过管理员远程手动开启才干够执行. 那么是否能利用forever加启动脚本方式解决上述问题呢?答案当然是肯定的.仅仅只是有点麻烦.并且forever官方缺少具体的配置文档.我在配置的时候也走了一些弯路,以下具体来说. 注