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

静态网站建设摘要个人做盈利网站

静态网站建设摘要,个人做盈利网站,企业网站建设开发成本利润多少,教做世界美食的网站目录 前言 一、进程组ID与会话ID 二、setsid() 创建新会话 三、daemon 守护进程 前言 在之前#xff0c;我们学习过socket编程中的udp通信与tcp通信#xff0c;但是当时我们服务器启动的时候#xff0c;都是以前台进程的方式启动的#xff0c;这样很不优雅#xff0c…目录 前言 一、进程组ID与会话ID 二、setsid()  创建新会话 三、daemon 守护进程 前言 在之前我们学习过socket编程中的udp通信与tcp通信但是当时我们服务器启动的时候都是以前台进程的方式启动的这样很不优雅因为前台进程无法接受命令输入同时也可能一不小心被使用者终止。因此我们得让服务器以守护进程的方式进行运行。如果不太了解可以看这篇文章前台进程与后台进程。 一、进程组ID与会话ID 我们输入 指令 ps axj 可以找到当前系统中的所有进程并且查看如下各种信息。 PPID: 父进程ID。PID: 进程ID。PGID: 进程组ID。SID: 会话ID。TTY: 与进程关联的终端类型如果有的话。TPGID: 终端的前台进程组ID如果有的话。STAT: 进程状态例如S表示休眠R表示运行等。UID: 用户ID表示运行该进程的用户。TIME: CPU时间表示进程使用的CPU时间总量。COMMAND: 启动进程的命令名或命令行。 我们主要来看进程组ID PGID 和会话ID SID。 如下启动一个sleep进程查询sleep进程的信息。发现sleep进程的组 PGID 就是自己的PIDPPID 就是bash进程的ID。也就是说该sleep自成进程组。 同时进程组默认是在一个会话中的。 如果我们又打开一个bash一个命令创建三个sleep会发现他们的PGID都是第一个创建的进程PID同时SID都是bash。 他们的关系如下图所示。任何时刻一个会话可以有很多进程组bash是一个组sleep1000 | sleep 2000 | sleep 3000 又是一个进程组sleep 10000也是一个进程组。但默认情况只允许一个进程组在前台。 也就是说bash在前台的话 命令行就能接受命令如果前台被其他进程占据那么bash就会退回到后台也就无法接受命令了。 因此如果我们启动的服务器程序是在当前会话中那么当bash退出shell关闭或者被不小心kill 掉那么我们的服务器也会随之崩溃。 如果想让服务器不受xshell用户登录和退出的影响就要让服务器程序自成一个会话不隶属于任何一个bash。这就是守护进程。 二、setsid()  创建新会话 setsid() 可以创建一个新会话调用之后当前进程会与原会话和进程组脱离关系。这意味着进程不再属于原来的会话和进程组而是成为新会话的领头进程并可能创建一个新的进程组。 但是他有一个前提调用setsid的进程不能是进程组的组长。 也就是说之前的sleep 1000 | sleep 2000 | sleep 30000 中sleep 1000进程是进程组的组长那么他就无法使用setsid。 同时如果当前进程组只有一个进程那就默认该进程就是组长也无法使用setsid。 那么我们处理方式也很简单让进程fork一下使用子进程去setsid即可。也就是说守护进程一定就是孤儿进程。 三、daemon 守护进程 对于具体的进程守护化我们通常需要做如下内容 忽略可能一起进程异常退出的信号fork进程让子进程去调用setsid()改变cwd当前工作目录可选可不选如果让cwd变为根目录想误删也就不太可能同时访问速度也会更快一点。处理用户的标准输入、标准输出、标准错误。守护进程化后通常不需要直接与用户进行交互避免资源浪费和潜在的问题。 #pragma once#include iostream #include sys/types.h #include sys/stat.h #include fcntl.h #include unistd.h #include signal.h//该文件相当于垃圾箱往里面cout、cerr就相当于丢弃数据cin相当于直接读到文件末尾 const char *dev_null /dev/null;void deamon(bool ischidr, bool isclose) {// 1.忽略可能引起进程异常退出的信号signal(SIGCHLD, SIG_IGN);signal(SIGPIPE, SIG_IGN);// 2.fork进程让子进程去setsidif (fork() 0)exit(0);setsid();// 3.改变当前工作目录if (ischidr)chdir(/);// 4.处理用户的输入输出与错误int fd open(dev_null, O_RDWR);if (isclose){//直接关闭close(0);close(1);close(2);}else{if (fd 0){dup2(fd, 1);dup2(fd, 2);dup2(fd, 3);close(fd);}} } 库里面也有daemon函数我们也是模仿库里面写的但是自己写的daemon可控性会更高一些。 那么现在就可以对服务器之前写的Tcp服务器进程处理直接调用deamon同时日志的作用也体现出来了将需要的消息放到日志中。 这样也能正常运行并将进程守护化了关闭shell也无法将线程退出需要关闭机器或者使用kill命令。 代码链接
http://www.w-s-a.com/news/475266/

相关文章:

  • 张家港建网站公司网站开发 认证
  • 网站建设方式优化兰州医院网站制作
  • 怎么创造网站wordpress伪静态规则怎么写
  • 自己怎么做一元购物网站信誉好的合肥网站推广
  • 做网站的骗术有什么好的网站设计思想的博客
  • 网站建设工作 方案企查查企业信息查询在线
  • 上海外贸建站商城定制软件安卓
  • 成都网站建设_创新互联wordpress 相邻文章
  • 电子商务网站制作步骤免费建网站知乎
  • 龙岩有什么招聘本地网站团购网站 方案
  • 服务器运行一段时间网站打不开注册公司名字核名查询系统
  • 企业网站改版的意义响应式网站建设新闻
  • 大连金州新区规划建设局网站金坛市建设局网站
  • 有哪些做排球比赛视频网站wordpress 教师工作坊
  • 深圳好点的网站建设公司互联网企业信息服务平台
  • 下载空间大的网站建设哈尔滨网站制作软件
  • 南城网站仿做无锡网站制作哪家价格便宜
  • c做的网站营销策划课程
  • 免费网站404免费进入重庆的公需科目在哪个网站做
  • 网站空间租用费用网站建设公司怎么宣传
  • 镇江网站建设优化案例分析dw2018网页制作步骤图文
  • 网站开发一个多少钱为什么前端都不用dw
  • 网站降权的原因北京中小企业网站建设公司
  • 个人域名能做网站吗wordpress
  • 手机网站设计只找亿企邦工业设计公司简介
  • 腾讯云主机做网站免费网站怎么做啊
  • 网站建设推广销售话术广州网页定制多少钱
  • 备案号是哪个网站项目管理pmp
  • 做网站需要哪些硬件软件网站视频链接怎么做的
  • 电子商务网站建设试题二wordpress主页显示浏览数