首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
waitpid等待一个进程组所有进程再返回
2024-09-01
linux 进程等待 wait 、 waitpid
waitpid() 与 wait() 功能相似,都是用户主进程等待子进程结束或中断. 可用于进程之间的同步 wait 函数原型 pid_t wait(int *status); 函数说明 wait() 会临时停止眼下进程的运行,直到有信号来到或子进程结束.假设在调用wait() 时子进程已经结束,则 wait() 会立即返回子进程结束状态值.子进程的结束状态值会由參数 status 返回,而子进程的进程识别码也会一块返回.假设不在意结束状态值,则參数ststus能够设为 NULL.子进程的结束状
linux 会话 进程组 守护进程
Linux 下每个进程都会有一个非负整数表示的唯一进程 ID ,简称 pid . Linux 提供了 getpid 函数来获取 进程的 pid ,同时还提供了 getppid 函数来获取父进程的 pid 每个进程都有父进程,父进程也有父进程,这就形成了一个以 init 进程为根的家族树.除此以外,进程还有其他层次关系:进程.进程组和会话.进程组和会话在进程之间形成了两级的层次:进程组是一组相关进程的集合,会话是一组相关进程组的集合.用人来打比方,会话如同一个公司,进程组如同公司里的部门,进程则如
linux系统编程--守护进程,会话,进程组,终端
终端: 在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进程的控制终端(Controlling Terminal), 进程中,控制终端是保存在PCB中的信息,而fork会复制PCB中的信息,因此由Shell进程启动的其它进程的控制终端也是这个终端. 默认情况下(没有重定向),每个进程的标准输入.标准输出和标准错误输出都指向控制终端,进程从标准输入读也就是读用户的键盘输入, 进程往标准输出或标准错误输出写也就是输出到显示器上.信号中还讲过,在控制终端输入一些特
进程组与会话 Linux Process Groups and Sessions
在类Unix系统中,用户通常会跟各种相关的进程打交道.虽然在登录的时候只有一个终端进程(用户对应的登录shell ,通过这个shell启动各种程序和服务),但通常不久以后就会产生许多相关的进程,例如进行如下动作: 在后台运行无交互的程序(例如bash命令中末位的"&") 通过shell的 job control在各种交互进程之间切换 通过管道启动一组程序 在图形环境下(例如X window system)启用多个终端窗口 为了管理这些进程,内核便对这些进程进行了分组,称其为进程
二十七、Linux 进程与信号---进程组和组长进程
27.1 进程组 27.1.1 进程组介绍 进程组为一个或多个进程的集合 进程组可以接受同一终端的各种信号,同一个信号发送进程组等于发送给组中的所有进程 每个进程组有唯一的进程组 ID 进程组的消亡要等到组中所有的进程结束 进程组的消亡:kill 发送信号给进程组 kill -9 -进程组号 27.1.2 进程组 ID 获取--- getpgrp 和 getpgid (1)getpgrp --- 获取调用进程的进程组ID #include <unistd.h> pid_t getpgrp(v
UNIX高级环境编程(12)进程关联(Process Relationships)- 终端登录过程 ,进程组,Session
在前面的章节我们了解到,进程之间是有关联的: 每个进程都有一个父进程: 子进程退出时,父进程可以感知并且获取子进程的退出状态. 本章我们将了解: 进程组的更多细节: sessions的内容: login shell和我们从login shell启动的进程之间的关系. 一 终端登录(Terminal Logins) BSD Terminal Logins BSD终端的登录程序在过去35年都没有改变. 系统管理员(the system adminstrator)创建一个文件 /etc/ttys
进程 、进程组、会话、控制终端之间的关系 (转载 http://blog.csdn.net/yh1548503342/article/details/41891047)
一个进程组可以包含多个进程 进程组中的这些进程之间不是孤立的,他们彼此之间或者存在者父子.兄弟关系,或者在功能有相近的联系. 那linux为什么要有进程组呢?其实提供进程组就是方便管理这些进程.假设要完成一个任务,需要同时并发100个进程,当用户由于 某种原因要终止这个任务时,要是没有进程组,就需要一个个去杀死这些进程,设置了进程组之后,就可以对进程组中的每个进程进行杀死. 每个进程必定属于一个进程组,也只能属于一个进程组. 一个进程除了有进程ID外,还有一个进程组ID,每个进程组也有唯一的进程
Linux-进程、进程组、作业、会话、控制终端详解
一.进程 传统上,Unix操作系统下运行的应用程序. 服务器以及其他程序都被称为进程,而Linux也继承了来自unix进程的概念.必须要理解下,程序是指的存储在存储设备上(如磁盘)包含了可执行机器指 令(二进制代码)和数据的静态实体:而进程可以认为是已经被OS从磁盘加载到内存上的.动态的.可运行的指令与数据的集合,是在运行的动态实体.这里指的 指令和数据的集合可以理解为Linux上ELF文件格式中的.text .data数据段. 二.进程组 每个进程除了有一个进程ID之外,还属于一个进程组,那什
linux内核之进程的基本概念(进程,进程组,会话关系)
进程是操作系统的一个核心概念.每个进程都有自己唯一的标识:进程ID,也有自己的生命周期.一个典型的进程的生命周期如图4-1所示. 进程都有父进程,父进程也有父进程,这就形成了一个以init进程为根的家族树.除此以外,进程还有其他层次关系:进程.进程组和会话. 进程组和会话在进程之间形成了两级的层次:进程组是一组相关进程的集合,会话是一组相关进程组的集合. 这样说来,一个进程会有如下ID: ·PID:进程的唯一标识.对于多线程的进程而言,所有线程调用getpid函数会返回相同的值. ·PGID:进
【MPI学习7】MPI并行程序设计模式:MPI的进程组和通信域
基于都志辉老师MPI编程书中的第15章内容. 通信域是MPI的重要概念:MPI的通信在通信域的控制和维护下进行 → 所有MPI通信任务都直接或间接用到通信域这一参数 → 对通信域的重组和划分可以方便实现任务的划分 (1)通信域(communicator)是一个综合的通信概念.其包括上下文(context),进程组(group),虚拟处理器拓扑(topology).其中进程组是比较重要的概念,表示通信域中所有进程的集合.一个通信域对应一个进程组. (2)进程(process)与进程组(group)
Linux 的进程组、会话、守护进程
一.进程组ID 每个进程都属于一个进程组.每个进程组有一个领头进程.进程组是一个或多个进程的集合,通常它们与一组作业相关联,可以接受来自同一终端的各种信号.每个进程组都有唯一的进程组ID(整数,也可以存放在pid_t类型中).进程组由进程组ID来唯一标识.除了进程号外(PID)之外,进程组ID也是一个进程的必备属性之一. getpgrp: 获得进程组 id, 即领头进程的 pid #include <unistd.h> pid_t getpgrp(void); //返回值:调用进程的进程组ID
linux下的守护进程及会话、进程组
守护进程.会话.进程组网上有许多不错的资料.我也是网上搜罗了一堆,加上自己的理解.不敢说原创,只是写在这怕自己忘记罢了.才疏学浅,难免有错误,欢迎大家指正.下面这篇写很不错,大家可以去看看:http://www.cnblogs.com/forstudy/archive/2012/04/03/2427683.html.下面的部分内容引用了他的描述. 进程组:进程组就是把一个或多个进程划为一组,给这个组分配一个组id(pgid),这个id通常是进程组组长(该组的第一个进程)的pid.如果进程组组长退
APUE 2 - 进程组(process group) 会话(session) job
进程组(process group) 进程组顾名思义是指一个或多个进程的集合.他们通常与同一个job(可以从同一个终端接收信号)相关联.每个进程组拥有一个唯一的Process Group Id.可以使用getpgrp或getpgid获取进程的Process Group Id: #include <unistd.h> /* 返回调用进程的进程组Id */ pid_t getpgrp(void); /* 若pid为0,作用与getpgrp相同 */ pid_t getpgid(pid_t pid)
进程组&Session
[进程组] 1. getpgrp(), getpgid(0) 可获取进程组id, 进程组长的pid等于pgid. 如果进程组长exit, 则进程组依旧存在, 组内其它进程的组ID仍然是之前的ID, 即不存在进程组长了. 2. fork()一个子进程后,子进程的组ID为父进程的组ID. 可以通过setpgid()来更改. 3. shell 中执行一个后台命令, 则会创建一个进程&进程组 4. shell 中执行一个前台命令, 则会创建一个进程&进程组, 如果有管道, 则所有的管道命令在同一个
Linux进程组和会话
Linux的进程相互之间有一定的关系.比如说,在Linux进程基础中,我们看到,每个进程都有父进程,而所有的进程以init进程为根,形成一个树状结构.我们在这里讲解进程组和会话,以便以更加丰富的方式了管理进程. 进程组 (process group) 每个进程都会属于一个进程组(process group),每个进程组中可以包含多个进程.进程组会有一个进程组领导进程 (process group leader),领导进程的PID (PID见Linux进程基础)成为进程组的ID (process
Linux进程学习(孤儿进程和守护进程)
孤儿进程和守护进程 通过前面的学习我们了解了如何通过fork()函数和vfork()函数来创建一个进程.现在 我们继续深入来学习两个特殊的进程:孤儿进程和守护进程 一.孤儿进程 1.什么是 孤儿进程如果一个子进程的父进程先于子进程 结束, 子进程就成为一个孤儿进程,它由 init 进程收养,成为 init 进程的子进程.2.那么如何让一个进程变为一个孤儿进程呢?我们可以先创建一个进程,然后杀死其父进程,则其就变成了孤儿进程.pid = fork();if(pid > 0) {
Linux进程学习 - 孤儿进程和守护进程
孤儿进程和守护进程 通过前面的学习我们了解了如何通过fork()函数和vfork()函数来创建一个进程.现在 我们继续深入来学习两个特殊的进程:孤儿进程和守护进程 一.孤儿进程 1.什么是 孤儿进程如果一个子进程的父进程先于子进程 结束, 子进程就成为一个孤儿进程,它由 init 进程收养,成为 init 进程的子进程.2.那么如何让一个进程变为一个孤儿进程呢?我们可以先创建一个进程,然后杀死其父进程,则其就变成了孤儿进程.pid = fork();if(pid > 0) {
Linux孤儿进程与僵尸进程
1. 基本概念: 孤儿进程:父进程退出,但是其子进程仍然在运行,那么这些子进程被称为孤儿进程:孤儿进程会被init进程收养,并作善后处理: 僵尸进程:一个已经终止,但是其父进程尚未对齐进行善后处理的进程被称为僵尸进程:ps命令状态为Z的进程: 善后处理:内核为每个终止子进程保存了一定量的信息,这些信息至少包括进程ID,该进程的终止状态,以及进程使用的CPU时间总量.如果父进程没有使用wait或者waitpid获取终止子进程有关信息,这些信息将一直保存,直到父进程处理后才能释放它仍占有的资源: 2
linux进程篇 (三) 进程间的通信2 信号通信
2. 信号通信 用户空间 进程A <----无法通信----> 进程B -----------------|--------------------------------------|-------------- | | 内核空间 |<-------------> 信号 <--------------->| ---------------------------------------------------------------------- () 信号的发送 k
linux c编程:进程控制(四)进程关系
每一个进程除了有一个进程ID外,还属于一个进程组. 进程组是一个或多个进程的集合,通常情况下,他们是在同一作业中结合起来的,同一进程组的个进程接受来自同一终端的各种信号. 每一个进程组有一个唯一的进程ID. 组长进程 每个进程组都有一个组长进程,组长进程的进程组ID等于其进程ID. 进程组组长可以创建一个进程组,创建进程组中的进程然后种植.只要进程组中还有任意一个进程存在,那么这个进程组就存在. 从进程组的创建到最后一个进程离开的时间去成为进程组的生命周期 函数getpgrp返回调用进程的进程
wait & waitpid 以及子进程传给父进程的信号分析
wait() 和 waitpid() wait() 系统调用挂起调用进程的执行直到有一个孩子终止.调用 wait(&status) 等价于: waitpid(-1, &status, 0); waitpid() 系统调用挂起调用进程的执行直到由参数 pid 指定的孩子的状态发生改变.默认情况下,waitpid() 只等待孩子的终止,但是这个行为可能通过 options 参数来改变,具体描述如下. pid 值可以是: < -1 表示等待 进程组ID 为 pid 绝对值的进程组内的所有孩
热门专题
vue 动态触发 el-upload 选择文件
npoi 获取合并单元格
springboot获取资源目录文件jar
cesium 离线部署
js获取 iframe body
后端如何获取前端的token
安装oracle10g 出现操作系统
用javascript 给input添加一个失去焦点事件
linux下 qt的connect不能自动补全
UniStorm与unity sky Weather
jsbase64转图片
再gvim中浏览目录
monderuscue封装linux
springcloud gateway nacos 主动刷新
为啥使用lambda表达式
java集成swagger后怎么访问
ArrayList排序sort自定义比较
怎么看c的core-dump
vue cd到那个文件运行
python搭建开发环境 程序的输出输入