前言

Linux 平台下,经常需要程序脱离终端在后台运行,很多程序在启动的时候需要加 -d 参数,这一般代表以守护进程(后台进进程)的方式启动。那么怎么启动守护进程呢?

创建方式

//程序退出的默认动作void prog_exit(int signo){std::cout <"program recv signal " <" to exit." <std::endl; 

    //释放资源}

void daemon_run(){    int pid;    signal(SIGCHLD, SIG_IGN);    //1)在父进程中,fork返回新创建子进程的进程ID;    //2)在子进程中,fork返回0;    //3)如果出现错误,fork返回一个负值;    pid = fork();    if (pid 0)    {        std:: cout <"fork error" <std::endl;        exit(-1);    }    //父进程退出,子进程独立运行    else if (pid > 0) {        exit(0);    }    //之前parent和child运行在同一个session里,parent是会话(session)的领头进程,    //parent进程作为会话的领头进程,如果exit结束执行的话,那么子进程会成为孤儿进程,并被init收养。    //执行setsid()之后,child将重新获得一个新的会话(session)id。    //这时parent退出之后,将不会影响到child了。    setsid();    int fd;    fd = open("/dev/null", O_RDWR, 0);    if (fd != -1)    {        dup2(fd, STDIN_FILENO);        dup2(fd, STDOUT_FILENO);        dup2(fd, STDERR_FILENO);    }    if (fd > 2)        close(fd);}

int main() {    //设置信号处理,为了防止守护进程在没有运行起来之前,控制终端受到干扰或挂起    signal(SIGCHLD, SIG_DFL);    signal(SIGPIPE, SIG_IGN);    signal(SIGINT, prog_exit);    signal(SIGKILL, prog_exit);    signal(SIGTERM, prog_exit);

    bool bdaemon = false;    while ((ch = getopt(argc, argv, "p:d")) != -1)    {        switch (ch)        {        case 'd':            bdaemon = true;            break;    }

    if (bdaemon)        daemon_run();

}

可以将上述代码放入你的项目中,运行时候加 -d 参数,即可实现守护进程的方式启动。

linux 守护进程_Linux 守护进程相关推荐

  1. java 僵尸进程_Linux 僵尸进程

    Linux 允许进程查询内核以获得其父进程的 PID,或者其任何子进程的执行状态.例如,进程可以创建一个子进程来执行特定的任务,然后调用诸如 wait() 这样的一些库函数检查子进程是否终止.如果子进 ...

  2. linux QT 结束当前进程_Linux结束进程到底有多少种方法?

    请关注本头条号,每天坚持更新原创干货技术文章. 如需学习视频,请在微信搜索公众号"智传网优"直接开始自助视频学习. 1. 前言 我们经常在Linux里使用kill命令来结束某后台进 ...

  3. c++ 隐藏进程_Linux 查看进程的动态信息

    前言 top命令经常用来监控Linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况 目录 一.描述 二.top命令常用字段含义 三.top中的子命令 四.总结 五.思维导 ...

  4. linux守护进程写法_Linux守护进程的深入理解

    守护进程也称为精灵进程,是生存期较长的一种进程,常常在系统自举时启动,仅在系统关闭时终止.没有控制终端,仅仅在后台运行,Linux有很多守护进程执行日常事务活动.是不受终端控制的进程.想要脱离所有终端 ...

  5. Linux下一个简单守护进程的实现 (Daemon)

    在Linux/UNIX系统引导的时候会开启很多服务,这些服务称为守护进程(也叫Daemon进程).守护进程是脱离于控制终端并且在后台周期性地执行某种任务或等待处理某些事件的进程,脱离终端是为了避免进程 ...

  6. Linux系统编程之--守护进程的创建和详解【转】

    本文转载自:http://www.cnblogs.com/mickole/p/3188321.html 一,守护进程概述 Linux Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终 ...

  7. 【Linux系统编程】特殊进程之守护进程

    00. 目录 文章目录 00. 目录 01. 守护进程概述 02. 守护进程查看方法 03. 编写守护进程的步骤 04. 守护进程代码 05. 附录 01. 守护进程概述 守护进程(Daemon Pr ...

  8. Linux 进程(一) 进程概念和进程状态(僵尸进程、孤儿进程、守护进程)

    进程的概念 进程状态 僵尸进程.孤儿进程.守护进程 进程的概念 程序:一系列有序的指令集合(就是我们写的代码) 进程:进程就是程序的一次执行,是系统进行资源分配和调度的独立单位. 程序是一个没有生命的 ...

  9. 嵌入式linux系统下简单守护进程(daemon)的编写

    最近公司项目需要,需要在我们的嵌入式linux设备中创建一个守护进程,用于保护系统中的主进程,防止某些不可预期的意外导致主进程异常结束后,系统完全宕机没有任何反应,破坏用户体验感.但是,查阅诸多资料之 ...

最新文章

  1. C语言中整型在计算机中的存储
  2. python和单片机的用处哪个大_用Python控制硬件1-Python控制硬件的几种方式
  3. jQuery可以查MySQL吗,我们可以在JQuery中执行SQL查询吗
  4. Dataset之谷歌地图数据集:谷歌地图数据集的简介、安装、使用方法之详细攻略
  5. java和php混合_PHP和Java强强联合 集成开发详解
  6. linux防火墙之牛刀小试
  7. 201671010140. 2016-2017-2 《Java程序设计》java学习第十六周
  8. HAA2018A_音频功放规格书_V1.2
  9. 利用Python自动生成小学生加减乘除口算考试题卷
  10. mac safari java插件_如果提示您信任或更新 Mac 上 Safari 浏览器中的插件
  11. 宋宝华: 纪念金庸先生——程序员的武侠世界
  12. python程序运行进程、使用时间、剩余时间显示
  13. 【防火墙篇】01. 恢复出厂设置 ❀ Juniper 防火墙
  14. 崔希凡-javaWeb-笔记day07-day09(2016年7月26日23:17:27)
  15. TeamViewer和远程桌面冲突的问题
  16. 世界上最简单的会计书—读书笔记
  17. 手把手学STM32(一)
  18. 你知道如何健康饮水吗
  19. ZeroMQ 中文指南 第四章 可靠的请求-应答模式【转载】
  20. lammps 在Ubuntu 16.04LTS服务器并行安装—— ATC 扩展包的安装

热门文章

  1. 【leetcode】472. Concatenated Words
  2. 再来一波PHP程序员必看书籍
  3. Docker 部署ELK 日志分析
  4. WKWebView-填坑总结
  5. RHEL7.0 DNS服务配置
  6. MyBatis知多少(6)表现层与业务逻辑层
  7. PHP扩展开发 - 构建第一个PHP扩展
  8. Android借助Application重写App的Crash(简易版)
  9. 巧用qmake工具生成专业的makefile
  10. Aviator(表达式执行引擎)发布1.0.1