linux demon

#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <unistd.h>

void init_daemon()
{
 int pid;
 int i;
 if(pid = fork() > 0)
 {
  fprintf(stdout, "parent exit %d\n",getpid() );
  exit(0);
 }
 else if(pid < 0)
 {
  fprintf(stdout, "fork error%d\n",getpid() );
  exit(1);
 }

 /* 子进程继续执行 */
 setsid(); //创建新的会话组,子进程成为组长,并与控制终端分离
 return;
}

int main(int argc, char **argv)
{
 FILE *fp;
 int status, pid, ret;
 if (argc < 2) {
        fprintf(stderr, "Usage:%s <exe_path> <args...>\n", argv[0]);
        return -1;
    }
 //signal(SIGCHLD, SIG_IGN); /* 忽略子进程结束信号,防止出现僵尸进程*/
 init_daemon();
 while(1)
 {
  /* 防止子进程(组长)获取控制终端*/
  if( ( pid = fork() ) < 0 )
   exit(0); //错误,退出
  else if (pid == 0) {  //child
   fprintf(stdout, "start execv %s ,pid:%d\n",argv[1],getpid());
         ret = execv(argv[1], argv);
         if (ret < 0) {
             fprintf(stdout, "%s,execv ret:%d errno:%d\n", argv[1],ret, errno);
             continue;
         }
   fprintf(stdout, "end execv stprn ,pid:%d\n",getpid());
         exit(0);
     }
     else if (pid > 0) {
   fprintf(stdout, "wait pid:%d,cur pid:%d\n",pid, getpid());        
   waitpid(pid,NULL,0);        
         fprintf(stdout, "wait return,pid:%d\n",getpid());
     }
 }
 return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值