WebRTC服务器理论铺垫(二):后台服务

文章详细介绍了两种创建后台进程的方法:一是通过fork函数创建孤儿进程并配合setsid、改变工作目录以及重定向I/O实现;二是直接调用系统的daemonAPI进行后台运行。这两种方法都确保了进程独立于终端并以守护进程形式运行。
摘要由CSDN通过智能技术生成


前言

一、以fork方式创建后台进程

#include<iostream>
#include<unistd.h>
#include<stdlib.h>
#include<fcntl.h>
using namespace std;
//使用fork创建进程的若干步骤
//1.fork一个子进程并且退出父进程,子进程成为一个孤儿进程并由init进程接管
//2.调用setsid建立新的进程会话
//3.将当前工作目录切换到根目录
//4.将标准输入输出出错重定向到/dev/null
void daemonize()
{
  pid_t pid;
  if( (pid = fork()) < 0 )
  {
     cout<<"Can Not Create Suprocess!"<<endl;
  }else{
    //子进程的pid = 0,退出父进程
    if(pid != 0)
    {
        exit(0);
    }
  }
  setsid();
  if(chdir("/") < 0){
     cout<<"Can Not Change Dir!"<<endl;
     exit(-1);
  }

  int fd = open("/dev/null",O_RDWR);
  dup2(fd,STDIN_FILENO);
  dup2(fd,STDOUT_FILENO);
  dup2(fd,STDERR_FILENO);
  return;
}
int main(int argc,char* argv[])
{
   daemonize();
   while(1)
   {
      sleep(1);
   }
   return 0;
}

二、调用系统的daemon API

#include<iostream>
#include<unistd.h>
#include<stdlib.h>

using namespace std;
int main(int argc,char* argv[])
{
  //第一个0 : 切换到根目录
  //第二个0 : 输入输出重定向
  //daemon(int nochdir,int noclose)
    if(daemon(0,0) == -1){
      cout<<"ERROR!"<<endl;
      exit(-1);
    }
    while(1)
    {
      sleep(1);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值