正规的方法, 创建一个deamon进程,需要很多步骤
1. fork()
2. 子进程setsid()
3. 主进程wait()
4. chdir()
5. umask()

非正规方法创建一个deamon进程的步骤:
1. 创建一个子进程fork(), 创建子进程的目的是为了后面的设置进程组ID.
2. 子进程执行setsid(), 执行setsid()有两个目的, 一是创建一个新的会话,二是设置进程组ID.
3. 主进程wait()

每个函数都有他的意义.稍后再研究一下:

创建一个deamon进程

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>int main(int argc, char *argv[])
{int n = fork();pid_t pid;fprintf(stdout, "PID:%d, PGID:%d, SID:%d\n", getpid(), getpgrp(), getsid(0));int stat = 0;if (n > 0) {pid_t x = wait(&stat);printf("child pid=%d\n", x);if(WIFEXITED(stat) == 0) {printf("child normal exited!\n");}} else if (n == 0) {if(setsid() < 0) {fprintf(stderr, "setsid error:%s\n", strerror(errno));}while(1) {printf("child.\n");sleep(1);}}return 0;
}

输出:

子进程退出后, 主进程仍然能正确启动子进程的demo:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>int main(int argc, char *argv[])
{while(1) {int n = fork();pid_t pid;fprintf(stdout, "PID:%d, PGID:%d, SID:%d\n", getpid(), getpgrp(), getsid(0));int stat = 0;if (n > 0) {pid_t x = wait(&stat);printf("child pid=%d\n", x);if(WIFEXITED(stat) == 0) {printf("child normal exited!\n");}} else if (n == 0) {if(setsid() < 0) {fprintf(stderr, "setsid error:%s\n", strerror(errno));}while(1) {printf("child.\n");sleep(1);}}sleep(5);}return 0;
}

输出:

僵尸进程:
僵尸进程, 是指子进程先于父进程退出, 且退出时, 父进程没有收到子进程的退出信号.

#include <unistd.h>
#include <stdio.h>int main(int argc, char *argv[])
{int n = fork();pid_t pid;fprintf(stdout, "PID:%d, PGID:%d, SID:%d\n", getpid(), getpgrp(), getsid(0));if (n > 0) {while(1) {printf("parent.\n");sleep(1);}} else if (n == 0) {printf("child.\n");}return 0;
}

输出:

c++创建一个linux deamon进程相关推荐

  1. 手动添加linux用户,Linux入门教程:如何手动创建一个Linux用户

    想到要创建一个用户的时候,我们马上想到了useradd命令或者在图像下进行建立,但是这样并没有真正的了解linux用户的生成步骤,我们知道在linux下"一切皆文件",那么对于一个 ...

  2. 如何写一个Linux精灵进程

    --Devin Watson 这个文档演示了如何使用gcc在linux中写一个精灵进程,使用这篇文档的前提是有Linux的知识和熟悉C语言.这篇文档的版权者是Devin Watson,使用BSD协议. ...

  3. linux下进程的创建代码,Linux下进程创建分析

    如何创建一个进程? 子进程拷贝父进程的代码和数据,进程拥有自己的独占资源(写时拷贝),父,子进程共享代码区,不共享数据区(私有化) 当使用pid_t fork(void)创建进程时,若创建成功,给父进 ...

  4. 如何创建一个linux用户名和密码,Linux下如何创建用户 | Soo Smart!

    Linux下如何创建用户? 初步接触linux时要学会用户账号的添加.删除与修改.用户口令的管理.用户组的管理方法,这里列出来供大家参考使用吧. user的create, delete, modify ...

  5. 基于PM8916 MPP创建一个Linux led子系统

    基于PM8916 MPP创建一个Linuxled子系统 首先,从kernel文件系统层面上创建sys文件系统节点/sys/class/leds/button-backlight/brightness的 ...

  6. linux进程阻塞例子,一个Linux守候进程例子

    其他程序可以调用void daemon_init(const char * cmd)方法,来初始化当前进程为守候进程 #include #include #include #include #incl ...

  7. GCE 创建一个Linux VM

    sudo yum install wget 安装Java sudo wget --no-check-certificate --no-cookies --header "Cookie: or ...

  8. 6、分析Linux内核创建一个新进程的过程

    姓名:周毅原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 这篇文章主要分析lin ...

  9. 总结-linux初识进程(包括cpu调度、进程创建、僵尸进程(重点)、环境变量)

    冯诺依曼体系结构--现代计算机的硬件体系结构 输入设备.输出设备(数据输出).存储器(数据缓冲).运算器(数据运算).控制器. 所有设备都是围绕存储器工作---CPU是从存储器中获取数据处理---控制 ...

  10. linux守护进程写法_搞懂进程组、会话、控制终端关系,才能明白守护进程如何创建...

    守护进程 概念: 守护进程,也就是通常所说的Daemon进程,是Linux中的后台服务进程.周期性的执行某种任务或等待处理某些发生的事件. Linux系统有很多守护进程,大多数服务都是用守护进程实现的 ...

最新文章

  1. thinkphp3.0部分总结
  2. Linux执行yum不显示时间,Linux停的yum命令详解(朝花夕拾)
  3. Security+考试总结
  4. python3.6 mysql 教程_Python3.6与MySQL建立连接
  5. Core Data 编程指南
  6. C++多线程快速入门(一):基本常用操作
  7. 理论与哲学就是梳理无限感性经验和知性知识的工具
  8. jdk1.8要安装什么mysql_Window下安装JDK1.8+Tomcat9.0.27+Mysql5.7.28的教程图解
  9. 信息学奥赛一本通(1065:奇数求和)
  10. 大型企业用什么orm_在大型仓储物流企业中使用什么类型的货架更为合适呢?
  11. 复变函数:傅里叶级数
  12. java 映射类的方法_java什么是映射
  13. 爬虫(二)—解析真实网页(猫途鹰)
  14. html5语音读取文字_微信语音转发给别人播放不了怎么办?该怎么转发?
  15. websocket与http优缺点
  16. 10003 微信登录失败 redirect_uri域名与后台配置不一致
  17. 打开本地html加载网页慢,电脑检查网速正常但打开网页慢如何解决
  18. requests库入门-14-HTTP基本认证
  19. 家用净水器哪个牌子好,家用净水器评测
  20. 鏖战双十一:阿里直播平台面临的技术挑战

热门文章

  1. 【mmdetection3d】——3D 目标检测 KITTI 数据集
  2. 2021牛客多校#10 F-Train Wreck(数学,优先队列)
  3. 计算机网络冗余,计算机网络基础知识之循环冗余码
  4. 解决win10笔记本电脑Wifi频繁自动断开
  5. 如何下载macOS Ventura、Monterey、Big Sur、Catalina Mojave完整安装程序
  6. js 判断2月份多少天
  7. java.net.ConnectException no available server
  8. html超链接为变量,如何向超链接添加变量值
  9. asp.net通用Web2.0仿淘宝脚本验证组件
  10. 深入浅出量化对冲Alpha基金的操作