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

建设工程招标公告在哪个网站新产品上市推广策划方案

建设工程招标公告在哪个网站,新产品上市推广策划方案,做 直销网站 公司名称,有域名之后怎么自己做网站9.1 引言 本章详细说明进程组以及会话的概念,还将介绍登录shell(登录时所调用的)和所有从登录shell启动的进程之间的关系。 9.2 终端登录 9.3 网络登录 9.4 进程组 每个进程除了有一进程ID之外,还属于一个进程组,进…

9.1 引言

本章详细说明进程组以及会话的概念,还将介绍登录shell(登录时所调用的)和所有从登录shell启动的进程之间的关系。

9.2 终端登录

在这里插入图片描述

9.3 网络登录

在这里插入图片描述

9.4 进程组

  • 每个进程除了有一进程ID之外,还属于一个进程组,进程组是一个或多个进程的集合;
  • 同一进程组中的各进程接收来自同一终端的各种信号;
  • 每个进程组有一个唯一的进程组ID,它是一个正整数。

getpgrp函数返回调用进程的进程组ID:

#include <unistd.h>pid_t getpgrp(void);// 返回值:调用进程的进程组ID 

getpgid函数返回指定进程的进程组ID:

#include <unistd.h>pid_t getpgid(pid_t pid);// 返回值:若成功,返回进程组ID;若出错,返回-1
  • pid参数是0,返回调用进程的进程组ID,即getpgid(0)等效于个getpgrp()。

进程组相关概念:

  • 每个进程组有一个组长进程,组长进程的进程组ID等于其进程ID;
  • 进程组组长可以创建一个进程组、创建该组中的进程,然后终止;
  • 只要在某个进程组中有一个进程存在,则该进程组就存在,这与其组长进程是否终止无关;
  • 从进程组创建开始到其中最后一个进程离开为止的时间区间称为进程组的生命期;
  • 某个进程组中的最后一个进程可以终止,也可以转移到另一个进程组。

进程调用setpgid可以加入一个现有的进程组或者创建一个新进程组:

#include <unistd.h>int setpgid(pid_t pid, pid_t pgid);// 返回值:若成功,返回0;若出错,返回-1
  • 函数将pid进程的进程组ID设置为pgid
  • 如果两个参数相等,则由pid指定的进程变成组长进程;
  • 如果pid0,则使用调用者的进程ID;
  • 如果pgid0,则由pid指定的进程ID用作进程组ID;
  • 一个进程只能为它自己或它的子进程设置进程组ID,且子进程调用了exec后,它就不再更改该子进程的进程组ID。

9.5 会话

会话是一个或多个进程组的集合。
在这里插入图片描述
进程调用setsid函数建立一个新会话:

#include <unistd.h>pid_t setsid(void);// 返回值:若成功,返回进程组ID;若出错,返回-1
  • 如果调用此函数的进程不是一个进程组的组长,则此函数创建一个新会话,具体会发生以下3件事:
    (1)该进程变成新会话的会话首进程(会话首进程是创建该会话的进程),此时,该进程是新会话中的唯一进程,可将会话首进程ID视为会话ID;
    (2)该进程成为一个新进程组的组长进程,新进程组ID是该调用进程的进程ID;
    (3)该进程没有控制终端(新会话没有控制终端),如果在调用setsid之前该进程有一个控制终端,那么这种联系也被切断。
  • 如果该调用进程已经是一个进程组的组长,则此函数返回出错。

getsid函数返回会话首进程的进程组ID:

#include <unistd.h>pid_t getsid(pid_t pid);// 返回值:若成功,返回会话首进程的进程组ID;若出错,返回-1
  • 如若pid是0,getsid返回调用进程的会话首进程的进程组ID;
  • 如若pid并不属于调用者所在的会话,那么调用进程就不能得到该会话首进程的进程组ID。

9.6 控制终端

会话和进程组还有一些其他特性:

  • 一个会话可以有一个控制终端,这通常是终端设备(在终端登录情况下)或伪终端设备(在网络登录情况下);
  • 建立与控制终端连接的会话首进程被称为控制进程
  • 一个会话中的几个进程组可被分为一个前台进程组以及一个或多个后台进程组
  • 如果一个会话有一个控制终端,则它有一个前台进程组,其他进程组为后台进程组;
  • 无论何时键入终端的中断键(常常是Delete或Ctrl+C),都会将中断信号发送至前台进程组的所有进程;
  • 无论何时键入终端的退出键(常常是Ctrl+\),都会将退出信号发送至前台进程组的所有进程;
  • 如果终端接口检测到调制解调器(或网络)已经断开连接,则将挂断信号发送至控制进程(会话首进程)。
    在这里插入图片描述

9.7 函数tcgetpgrp、tcsetpgrp和tcgetsid

需要有一种方法来通知内核哪一个进程组是前台进程组,这样,终端设备驱动程序就能知道将终端输入和终端产生的信号发送到何处:

#include <unistd.h>pid_t tcgetpgrp(int fd);// 返回值:若成功,返回前台进程组ID;若出错,返回-1
int tcsetpgrp(int fd, pid_t pgrpid);// 返回值:若成功,返回0;若出错,返回-1
  • 函数tcgetpgrp返回前台进程组ID,它与在fd上打开的终端相关联;
  • 如果进程有一个控制终端,则该进程可以调用tcsetpgrp将前台进程组ID设置为pgrpidpgrpid值应当是在同一会话中的一个进程组的ID,fd必须引用该会话的控制终端。

给出控制TTY的文件描述符,通过tcgetsid函数,应用程序就能获得会话首进程的进程组ID:

#include <termios.h>pid_t tcgetsid(int fd);// 返回值:若成功,返回会话首进程的进程组ID;若出错,返回-1

9.8 作业控制

3个特殊字符可使终端驱动程序产生信号,并将它们发送至前台进程组:

  • 中断字符(一般采用Delete或Ctrl+C)产生SIGINT
  • 退出字符(一般采用Ctrl+\)产生SIGQUIT
  • 挂起字符(一般采用Ctrl+Z)产生SIGTSTP

在这里插入图片描述

9.9 shell执行程序

shell处理管道的方式:

  • shell fork一个它自身的副本,然后此副本再为管道中的每条命令各fork一个进程;
  • 管道中的最后一个进程是shell的子进程,而执行管道中其他命令的进程则是该最后进程的子进程。

在这里插入图片描述

9.10 孤儿进程组

  • 一个其父进程已终止的进程称为孤儿进程,这种进程由init进程“收养”;
  • 整个进程组也可成为“孤儿”,孤儿进程组定义为:该组中每个成员的父进程要么是该组的一个成员,要么不是该组所属会话的成员。孤儿进程组的另一种描述:一个进程组不是孤儿进程组的条件是——该组中有一个进程,其父进程在属于同一会话的另一个组中。
  • 如果进程组不是孤儿进程组,那么在属于同一会话的另一个组中的父进程就有机会重新启动该组中停止的进程。

若父进程是由shell作为前台作业执行的,当父进程终止时,子进程变成后台进程组。

9.11 FreeBSD实现

在这里插入图片描述

9.12 实例代码

chapter9

http://www.mmbaike.com/news/50151.html

相关文章:

  • 企业网站的web应用环境通常有几种组合google官网登录
  • 电子网站搜索引擎怎么做俄罗斯搜索引擎浏览器
  • 四川省第十五公司官网网站关键词优化怎么弄
  • 做网站的大创结项购买一个网站域名需要多少钱
  • 珠海网站制作费用电脑培训学校课程
  • 淮安做网站app免费网络推广网站
  • 婚庆网站设计百度网盘手机app下载安装
  • 一般用什么做网站首页枸橼酸西地那非片是什么
  • 湖州百度网站建设教育培训网页设计
  • 可以做ppt的网站或软件腾讯朋友圈广告投放价格
  • 牡丹江做网站厦门seo网站推广
  • 香港公司网站内地主机互联网搜索引擎有哪些
  • 网站改版服务宁波怎么优化seo关键词
  • 成都定制app开发seo工资一般多少
  • 阿里云心选建站国内重大新闻10条
  • 乐山做美食推荐的网站百度指数官网数据
  • 做的好的网站欣赏在线一键生成网页
  • 西安城乡建设委员会网站打不开深圳疫情最新消息
  • 做产品代理上哪个网站好宁波网站制作与推广价格
  • 做网站之前备案上海关键词推广
  • 朝阳区建设工作办公室网站百度云电脑网页版入口
  • 医院网站可信认证必须做吗北京搜索引擎推广公司
  • wordpress 加关注插件长沙整站优化
  • wordpress 管理权限管理台州seo快速排名
  • 做以个一元购的网站多少钱厦门网络推广外包
  • 企业网站手机端跳转设置网络推广工作好吗
  • 炒股配资网站开发网络广告策划书
  • 无锡网站建设专家无锡网站制作东莞网站推广方案
  • 做企业网站推广多少钱培训平台有哪些
  • 微信公众号制作网站有哪些深圳seo公司排名