守护进程实例

该实例首先建立了一个守护进程,然后让该守护进程每隔5s在"/tmp/dameon.log"中写入一句话。

/*"dameon.c"创建守护进程实例*/

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<fcntl.h>

#include<sys/types.h>

#include<unistd.h>

#include<sys/wait.h>

#define MAXFILE 65535

 

int main(){

        pid_t pc;

        int i,fd,len;

        char *buf="This is a Dameon/n";

        len = strlen(buf);

 

        pc=fork(); //父进程退出

        if(pc<0){

                printf("error fork/n");

                exit(1);

        }else if(pc>0)

        exit(0);

 

        setsid();  //在子进程中创建

 

        chdir("/");   //改变当前目录为根目录

 

        umask(0);    //重设文件权限掩码

 

        for(i=0;i<MAXFILE;i++)   //关闭文件描述符

               close(i);

 

        while(1){    //这是创建完守护进程,一下开始正式进入守护进程工作

        if((fd=open("/tmp/dameon.log",O_CREAT | O_WRONLY | O_APPEND,0600)) < 0){

               perror("open");

               exit(1);

               }

         write(fd,buf,len+1);

         close(fd);

         sleep(5);

     }

}

 

将该程序下载到开发板中,可以看到该程序每隔5s就会在对应的文件中输入相关内容,并且使用ps可以看到该进程在后台运行,如下所示:

[root@(none) 1]# tail -f /tmp/dameon.log

This is a Dameon 

This is a Dameon 

This is a Dameon 

This is a Dameon 

This is a Dameon 

、、、、、、

[root@(none) 1]# ps -ef|grep daemon

76    root    1272    S    ./daemon

85    root    1520    S    grep daemon

 

 

实例2:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<fcntl.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/wait.h>

int main()
{
 pid_t pid;
 int i,fd;
 char *buf  = "This is a Damon/n";
 
 pid = fork();  //创建子进程,并退出父进程
 if(pid<0)
 {
  printf("Error fork/n");
  exit(1);
 }
 else if(pid > 0)
 {
  exit(0);
 }
 
 setsid();   //创建新会话
 chdir("/");    //设置工作目录
 umask(0);     //重设文件权限掩码
 for(i = 0;i < getdtablesize(); i++)    //关闭文件描述符
 {
  close(i);
 }
 if((fd = open("/tmp/daemon.log",O_CREAT|O_WRONLY|O_APPEND,0600))<0)  //创建完守护进程,以下开始正式进入守护进程工作
 {
  printf("Open file error/n");
  exit(1);
 }
 while(1)
 {
    write(fd,buf,strlen(buf)+1);
  sleep(1);
 }
 close(fd);
 exit(0);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值