Linux-进程间关系:进程组/作业/会话

本篇文章主要讲述进程间关系的几个基本概念。从以下几个方面叙述:

  • 进程组
  • 作业
  • 会话

进程组

一个进程除了有一个进程id之外,他还属于一个进程组。进程组是一个或多个进程的集合。通常,它们与同一个作业相关联,可以接受来自同一终端的各种信号。每个进程组有一个唯一的进程组id。每个进程组都可以有一个组长i进程。组长进程的标识是,其进程组id等于其进程id。组长进程可以创建一个进程组,创建该组中进程,然后终止。只要在某个进程组中一个进程存在,则该进程组就存在,这与其组长进程是否终止无关。

其实上面这段话有些抽象,我们来举个例子说明以下:
比如我们在学校里面都会分班,假设现在有一个同学他是第一个报名的,那么给它分配一个学号是1号,他所在的班级是1班,并且他是班长,后来又陆陆续续来了一些同学也被分配到这个班,它们的学号是2,3,……
这个1号同学就是组长进程,这个1班就是进程组,它们的标识符是一样的,后来的进程都属于这个进程组。

如果有一天这个班长退学了,它不上学了,那么这个1号学号就不复存在了,但是1号班级还在,并且里面的剩下其他同学也还在这个班级内。
如果剩下的同学也陆陆续续退学了,直到这个班级还剩下一个人,那么这个班级也还仍然存在。
如果这个班级中所有同学都不上了,一个人也没有了,那么这个班级也就不复存在了。

以上我们可以类比于进程组,进程组长,进程的关系。
总结如下:

  • 进程组长id与进程组id相同。
  • 进程组长可以终止,但进程组不会因此消失。
  • 进程组内只要还有一个进程存在,那么这个进程组就存在。
  • 进程组内所有进程终止,这个进程组就不复存在。

举例说明:
写一个死循环,让它保持在r状态。
以下可以查看到我们写的 group进程正在运行。
PPID:父进程的pid,这里是bash
PID:该进程的id。
PGID:该进程所属进程组的id。与该进程的pid一样。

这里写图片描述

创建多进程试试:
可以看到,该进程组id是15305,进程组长即父进程id是15305,其余子进程都属于该进程组并且id依次是15306…,但是进程组id都是一个。
这里写图片描述

作业

shell分前后台控制的不是进程而是作业或者进程组。一个前台作业可以由多个进程组成,一个后台也可以由多个进程组成,shell也可以运行一个前台作业和任意多个后台作业。这称为作业机制。

必须要区分:进程组与作业的区别:
如果作业中的某个进程又创建了子进程,则子进程不属于作业。

作业是分前后台运行的

下面我们来演示以下:前后台运行的区别:
前台运行:shell不起作用,被提到了后台运行。

这里写图片描述

后台运行:shell仍然在前台运行。

这里写图片描述

看下面的例子:

int main()
{
    pid_t id=fork();
    if(id==0)
    {
        while(1){
            printf("child(%d)# i am running\n",getpid());
            sleep(1);
        }
    }
    else
    {
        int i=5;
        while(i)
        {
            printf("parent(%d)# i am going to dead...%d\n",getpid(),i--);
            sleep(1);
        }
    }
    return 0;

}

先来看演示结果:
可以看到前5秒钟,shell不执行任何命令,,原因是我们的作业被提到了前台执行,shell被放在后台执行。
这里写图片描述

5秒之后父进程退出之后,子进程还在运行,但是此时shell可以执行了,说明子进程已经被提到了后台,但是还在不断地像屏幕输出信息。
这里写图片描述

我们再次查看进程id和进程组id:可以看到前5秒,有一个进程组16306,父进程是进程组长,id是16306,子进程是16307。
5秒钟之后,父进程退出,我们刚起地作业已经退出了,但是子进程还在,并且子进程所属的进程组还在。
这里写图片描述

但是子进程还在一直输出信息,我们尝试杀掉它,首先ctrl+c是不能杀死它的,原因是ctrl+c只能对前台进程有效,但是此时的子进程在后台,所以可以用kill -9命令杀死它。虽然如图所示可以看到,命令是被冲乱的,但是命令已经被输入到缓冲区里去了,只要一个回车就会被执行。

这里写图片描述

作业控制

jobs:查看当前作业
fg:将后台作业放回前台
bg:将前台作业放置后台并运行

演示以下:
我们先起几个作业并置于后台运行。
这里写图片描述

然后我们将后台进程切换至前台执行,ctrl+c终止它即可。
再次查看作业,发现作业1,已经被杀死了。
这里写图片描述

我们再起一个作业在前台执行,然后我们想把他放回后台运行。
首先:ctrl+z,暂停该进程,就会发现该进程已经被放在了后台,但是没有执行,是暂停状态。
bg命令可以让他在后台运行。

这u里写图片描述

会话

会话是一个或多个进程组的集合。一个会话可以有一个控制终端。这通常是登陆到其上的终端设备或伪终端设备。建立与控制终端连接的会话首进程被称为控制进程。一个会话中的几个进程组可被分为一个前台进程组以及一个或多个后台进程组。所以一个会话中,应该包括控制终端,一个前台进程组和任意后台进程组。

可以查看会话id:下图中的SID

这里写图片描述

那么15959是谁呢?
其实就是bash,就是命令解析器。
bash就是该会话中的控制进程,也是默认的前台进程组。
bash自成进程组,自成作业。
这里写图片描述

最后,梳理一下我们将之前学过的几个概念串在一起:大概画出了下面这张图。

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目的:让更多的人从零开始学会使用linux,少走弯路 演示系统:Ubuntu 10.04 desktop 适用人群:未接触或刚刚接触linux的同志们 本教程使用Ubuntu 10.04 LTS - Lucid Lynx做演示,其他版本皆大同小异,有特殊的相异之处, 我会特别指出,旨在为大家提供方便,勿做其他商业用途。 Ubuntu,Linux for human being ! 献给全人类的 Linux! 发布日期:2010-9-13 目录: Linux的简介------------------------------------------------------------------------------------------ 一、Linux的起源------------------------------------------------------------------------------------ 二、Linux的优势------------------------------------------------------------------------------------ Linux的安装------------------------------------------------------------------------------------------ 一、系统安装要求------------------------------------------------------------------------------------ 二、安装前的知识介绍------------------------------------------------------------------------------ 1.Linux 文件格式简介 2.推荐分区方法 三、安装方法的介绍--------------------------------------------------------------------------------- 1.Wubi安装 2.Windows linux双系统 3.只安装 Ubuntu 4.硬盘安装 四、硬件驱动的安装--------------------------------------------------------------------------------- Linux的初体验--------------------------------------------------------------------------------------- 一、登录----------------------------------------------------------------------------------------------- 1.本机登录 2.远程登录 3.登录失败 4.控制台的概念 5.更改密码 6.登出 7.注意事项 二、获取帮助----------------------------------------------------------------------------------------- 1.help 2.man 3.info 4.HOWTO 5.互联网大家庭 三、初识shell---------------------------------------------------------------------------------------- 命令行工具--------------------------------------------------------------------------------------------- 一、基本命令----------------------------------------------------------------------------------------- 1.显示文件名字 2.显示文本文件内容 3.删除文件 4.显示系统名字 5.关机或者重启-------------------------------------------------------------------------------------- 二、文件操作命令------------------------------------------------------------------------------------ 1.复制文件 2.重新命名 3.测试文件内容 4.查找字符串 5.显示文件头部 6.显示文件尾部 7.忽略文件中的重复行 8.比较两个文件 9.按顺序显示文件内容 三、进程通信命令--------------------------------------------------------------------------------- 四、一些重要指令------------------------------------------------------------------------------------ 1.显示文本 2.显示日期时 3.记录会话信息 五、压缩和归档文件--------------------------------------------------------------------------------- 1.压缩文件 2.解压缩文件 3.其他压缩方法 4.打包和解包文件 六、定位命令----------------------------------------------------------------------------------------- 1.定位工具 2.搜索关键字 3.搜索文件 七、获取用户和系统信息--------------------------------------------------------------------------- 1.列出系统上的用户 2.另一种方法 3.推荐使用的 八、用户通信-------------------------------------------------------------------------------------- 1.发送消息 2.接受消息和拒绝消息 九、发一封邮件-------------------------------------------------------------------------------------- 文件系统------------------------------------------------------------------------------------------------- 一、目录操作----------------------------------------------------------------------------------------- 1.创建目录 2.工作目录 3.更改工作目录 4.删除目录 5.移动目录 二、访问权限----------------------------------------------------------------------------------------- 1.显示访问权限 2.改变访问权限 3.目录访问权限 4.链接的概念 Shell------------------------------------------------------------------------------------------------------ 一、什么是shell------------------------------------------------------------------------------------- 二、shell命令行------------------------------------------------------------------------------------- 1.语法 2.处理机制 3.执行 三、与shell相关的配置---------------------------------------------------------------------------- 1.shell环境变量 2.元字符详细操作表 3.bash的相关配置 四、标准输入输出------------------------------------------------------------------------------------ 1.标准输入输出的机制 2.重定向(I/O重定向) 1.重定向的基本概念 2.I/O重定向的预备知识 3.基本I/O 4.进阶I/O 5.文件重写问题 3.管道 3.1 管道的特点 3.2 管道的创建 23.3 两个方向输 五、简单的shell编程------------------------------------------------------------------------------- 1.运行Shell脚本 2. Shell变量及其相关命令 2.1 读写shell变量 2.2 命令替换 2.3 导出环境变量 2.4 重置变量 2.5 创建只读用户自定义变量 2.6 读取标准输入 3. 脚本参数传递 4. 注释与程序头 5. 程序控制 5.1 if-then-elif-else-fi语句 5.2 for语句 5.3 while语句 5.4 until语句 5.5 break和continue命令 5.6 case语句 6. 常用命令集锦 六、shell后台运行程序----------------------------------------------------------------------------- 编辑器的使用------------------------------------------------------------------------------------------ 一、vi的基本概念------------------------------------------------------------------------------------ 1.命令行模式 2.插入模式 3.底行模式(最后一行模式) 二、vi的基本操作------------------------------------------------------------------------------------ 1.进入vi 2.切换至插入模式 3.Insert 的切换 4.退出vi及保存文件 三、命令行模式介绍--------------------------------------------------------------------------------- 1. 插入模式 2.从插入模式切换为命令行模式 3. 移动光标 4. 删除文字 5. 复制 6. 替换 7. 回复上一次操作 8. 更改 9. 跳至指定的行 四、最后一行模式命令简介------------------------------------------------------------------------- 1.列出行号 2.跳到文件中的某一行 3.查找字符 4.保存文件 5.离开vi 深入高阶(编程技术)-------------------------------------------------------------------------------- 一、输入源代码-------------------------------------------------------------------------------------- 二、编译,链接,运行------------------------------------------------------------------------------ 三、调试程序----------------------------------------------------------------------------------------- 服务器技术--------------------------------------------------------------------------------------------- 一、引言----------------------------------------------------------------------------------------------- 二、Tomcat容器------------------------------------------------------------------------------------ 1.安装j2sdk 2.安装tomcat 三、Apache Web服务器-------------------------------------------------------------------------- 四、Tomcat与Apache的整合------------------------------------------------------------------- 1.配置前的初始化工作 1.1 安装j2sdk 1.2安装Apache服务器 1.3 安装Tomcat服务器 1.4 安装mod_jk 1.5 准备工作目录和测试文件 2.配置Apache服务器 3.配置Tomcat服务器 3.1 建立workers.properties文件 3.2修改server.xml文件 3.3 修改jk2.properties文件 4.运行测试程序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值