当前位置: 首页 > news >正文

网站商城怎么做app/职业培训机构管理系统

网站商城怎么做app,职业培训机构管理系统,你注册过哪些网站,wordpress面向开发朋友们、伙计们,我们又见面了,本期来给大家带来守护进程相关的知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通 数据结…

朋友们、伙计们,我们又见面了,本期来给大家带来守护进程相关的知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成!

C 语 言 专 栏:C语言:从入门到精通

数据结构专栏:数据结构

个  人  主  页 :stackY、

C + + 专 栏   :C++

Linux 专 栏  :Linux

​ 

目录

1. 守护进程

1.1 进程组与会话

2. 实现守护进程


1. 守护进程

我们之前实现的网络服务(udp、tcp)不能直接在bash中以前台进程的方式直接运行,真正的服务器必须在Linux后台以守护进程(精灵进程)的方式运行!不受用户登陆和注销的影响

1.1 进程组与会话

在实现守护进程之前我们先来了解一组概念:

进程组、会话、作业

我们可以在bash启动一条命令来看一下这组概念:

同样的我们也可以查看一下bash的进程组与会话:

所以通过上面的例子就可以看出来:

  • PID == PGID是自成一个进程组,并且进程组默认一定是在一个会话中的;
  • bash是自成进程组,自成会话

那么如果我们同时启动多个进程呢:

  • 同时启动多个进程时,这些进程是可以属于一个进程组的,组ID一般是第一个进程组ID
  • 每次我们登录Linux时,OS都会给我们提供一个bash,然后提供一个终端,为我们提供解析命令行服务,这些都叫做一个会话;
  • 在命令行启动的所有进程,最终默认都是在当前会话内部的一个进程组(也可以是一个进程一个进程组)。  

通过结合我们之前在信号部分提到的前台进程与后台进程可以得出一个结论:

  • 任何时刻,一个会话内部,可以以有多个进程组(用户级任务),但是默认任何时刻,都只允许一个进程组在前台(前台进程组)
  • 会话和会话之前是具有隔离性的

在命令行启动命令时只需要在后面加上 & 既可以将其以后台进程的方式启动;

使用jobs可以查看当前会话的进程组:

我们已经运行起来的进程可以使用ctrl + z来停止然后将其放到后台:

通过fg + 任务编号可以将指定的任务放到前台:

通过bg + 任务编号可以将指定的任务在后台运行起来:

这些命令在前面的部分都已经提到过了,这里就不做过多解释了; 

2. 实现守护进程

结合进程组和会话的概念,守护进程其实就是一个独立的会话,不隶属于任何一个bash的会话:

实现守护进程的接口是:

他有一个前提条件是:

调用他的进程不能是一个进程组的组长,但是多个进程中,第一个是组长,单进程中自己也是组长,所以要实现守护进程,就必须要创建子进程,然后直接关闭父进程,此时的子进程就可以成为守护进程,换句话说,守护进程其实就是孤儿进程; 

实现守护进程一般分为五步:

  • ① 忽略可能引起进程异常退出的信号
  • ② 让自己不要成为组长(fork)
  • ③ 使用setsid接口;
  • ④ 是否将自己的当前目录(CWD)更改为根目录(为了方便以根目录直接查找各种资源)
  • ⑤ 是否需要关联用户的输入输出以及错误信息

Daemon.hpp:

#pragma once#include <iostream>
#include <cstdlib>
#include <signal.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>const char* root = "/";
const char *dev_null = "/dev/null";void Daemon(bool ischdir, bool isclose)
{// 1. 忽略可能引起进程异常终止的信号signal(SIGCHLD, SIG_IGN);signal(SIGPIPE, SIG_IGN);// 2. 让自己不要成为组长if (fork() > 0)exit(0);// 3. 守护进程// 设置让自己成为一个新的会话, 后面的代码其实是子进程在执行setsid();// 4. 是否更该CWDif (ischdir){chdir(root);}// 5. 已经变成守护进程,此时就不需要和用户的输入输出,错误进行关联了if (isclose){close(0);close(1);close(2);}else{// 一般建议使用这种方案int fd = open(dev_null, O_RDWR);if (fd > 0){dup2(fd, 0);dup2(fd, 1);dup2(fd, 2);close(fd);}}
}

Main.cc:

#include "Daemon.hpp"
#include <unistd.h>int main()
{// 变成守护进程Daemon(true, false);// 需要执行的核心代码while (1){sleep(1);}return 0;
}

测试结果:

同样的我们也可以对我们之前实现的udp和tcp代码进行守护进程化,在初始化之前将程序设置为守护进程即可:

tcp守护进程化源码:

https://gitee.com/yue-sir-bit/linux/tree/master/4.tcp_server_echo

http://www.whsansanxincailiao.cn/news/30283896.html

相关文章:

  • 石景山企业网站建设/企业培训员工培训平台
  • 门户网站和新闻网站的区别/百度答主招募入口官网
  • 网上购物商城网站建设/西安seo王
  • 网站seo插件/电商网站销售数据分析
  • 帮人做网站/湖南网络推广服务
  • 天津网站建设方案外包/新媒体营销案例
  • 广州做礼物的网站/云搜索
  • 哪里可以学做网站/windows优化大师靠谱吗
  • 项目网站建设方案/seo点击
  • 西安高端网站建设/软文广告经典案例300字
  • 成品网站好吗/百度问答seo
  • 怎么开网站做网红/视频外链在线生成
  • 怎么找到网站的空间服务商/seo属于什么职业部门
  • 电脑网站怎么制作/seo搜索引擎优化实战
  • 网站建设设计 网络服务/做网站优化的公司
  • 免费全国网站在线客服软件/专注于品牌营销服务
  • 做rom网站/培训总结精辟句子
  • 平邑网站开发/温州seo外包公司
  • 做网站不需要原件吧/整站优化关键词排名
  • 桂林论坛网app/北京外包seo公司
  • 家庭带宽100m做网站/如何建造自己的网站
  • 宁波专业品牌网站制作外包/谷歌网站推广优化
  • 长治做百度网站一年多少钱/百度快速优化软件
  • 什么网站可以做章/男生和女生在一起探讨人生软件
  • 网站的小图标怎么做的/找营销推广团队
  • 公司门户网站建设策划书/竞价账户托管的公司有哪些
  • 厦门网站建设哪家不错/seo排名优化网站
  • 苏州网站建设相关技术/快手流量推广网站
  • 免费试用平台网站源码/百度关键词刷搜索量
  • 株洲第三方网站建设哪家好/google seo