进程组的应用

一、实验1

题目:利用进程扇完成一个小实验。该进程扇有 1 个父进程和 3 个子进程,我们希望达到图 1 中的效果,即将进程 0 (父进程)和进程 1 设置成一组,假设为组 1,将进程 2 和 进程 3 设置成另一个组,假设为组 2. 另外,我们希望进程 0 和进程 2 分别是这两个组的组长。

                                                                 

 

测试代码:

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/wait.h>int main(void)
{setpgid(getpid(), getpid());pid_t group1 = getpgid(getpid());pid_t group2;int i = 0;for(; i < 3; ++i){pid_t pid = fork();if(pid < 0){perror("fork error");exit(1);}else if(pid > 0){// parent processif(i == 0)setpgid(pid, group1);if(i == 1){setpgid(pid, pid);group2 = getpgid(pid);}if(i == 2)setpgid(pid, group2);}else{// child processif(i == 0)setpgid(getpid(), group1);if(i == 1){setpgid(getpid(), getpid());group2 = getpgid(getpid());}if(i == 2)setpgid(getpid(), group2);break;}}printf("pid:%d, ppid:%d, pgid:%d\n", getpid(), getppid(), getpgid(getpid()));for(int i = 0; i < 3; ++i)wait(0);return 0;
}

输出结果:

 

二、实验2

题目:利用进程扇完成一个小实验。该进程扇有 1 个父进程和 3 个子进程,我们希望达到图 1 中的效果,即将进程 0 (父进程)和进程 1 设置成一组,假设为组 1,将进程 2 和 进程 3 设置成另一个组,假设为组 2. 另外,我们希望进程 0 和进程 2 分别是这两个组的组长。

                                                                            

测试代码:

#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>int main() 
{int pid, i;int group1, group2;setpgid(getpid(), getpid());group1 = getpgid(getpid());for (i = 0; i < 3; ++i) {pid = fork();if (pid > 0) {// fatherif (i == 0) {setpgid(pid, pid);group2 = getpgid(pid);}   else if (i == 1) {setpgid(pid, group1);}   else if (i == 2) {setpgid(pid, group2);}   break;}   else if (pid == 0) {// childif (i == 0) {setpgid(getpid(), getpid());group2 = getpgid(getpid());}   else if (i == 1) {setpgid(getpid(), group1);}   else if (i == 2) {setpgid(getpid(), group2);}   }   else if (pid < 0) {perror("fork");return -1; }   }printf("进程 %d, pid: %d -> ppid: %d, pgid: [%d]\n", i, getpid(), getppid(), getpgid(getpid()));while(1) sleep(1);return 0;
}

输出结果:

 

三、参考资料

1. 65-进程组(实验一)

2. 66-进程组(实验二)

3. 进程组和组长进程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/385579.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【原理+实战+视频+源码】docker映射端口教程

阿里巴巴Java岗面试题分享 1.HashMap 的内部结构&#xff1f;内部原理&#xff1f;和 HashTable 的区别&#xff0c;假如发⽣了 hash 碰撞&#xff0c;如何设计能让遍历效率⾼&#xff1f; 2.讲一讲讲讲 ConcurrentHashMap吧。 3.讲一下JVM虚拟机内存结构&#xff0c;以及它…

前台进程组、后台进程组

一、前台进程组、后台进程组 cat | cat & cat | cat | cat 输出结果&#xff1a; 二、主要函数应用 1. tcgetpgrp函数原型&#xff1a; #include <unistd.h> pid_t tcgetpgrp(int fd);返回值&#xff1a;若成功&#xff0c;返回前台进程组ID, 若出错&#xff0c;…

【原理+实战+视频+源码】docker权限参数

一面&#xff1a; 个人介绍加项目介绍20分钟 微服务架构是什么&#xff0c;它的优缺点&#xff1f; ACID CAP BASE理论 分布式一致性协议&#xff0c;二段、三段、TCC&#xff0c;优缺点 RPC过程 服务注册中心宕机了怎么办&#xff1f; 微服务还有其他什么组件 分布式架…

【孤儿进程】孤儿进程组、守护进程

一、孤儿进程组 1. 孤儿进程的定义&#xff1a; 定义1&#xff1a;该进程组的每个成员的父进程要么是该组的成员&#xff0c;要么在其它会话中。 定义2&#xff1a;一个进程不是孤儿进程组的条件是——该组有一个进程&#xff0c;其父进程在属于同一会话的另一个组中。 只要能…

【吐血整理】用java编写一个登陆界面

结构化数据、非结构化数据与半结构化数据 文章的开始&#xff0c;聊一下结构化数据、非结构化数据与半结构化数据&#xff0c;因为数据特点的不同&#xff0c;将在技术上直接影响存储引擎的选型。 首先是结构化数据&#xff0c;根据定义结构化数据指的是由二维表结构来逻辑表…

【大牛疯狂教学】cdhkafka打开的文件描述符临界阈值

基本知识 1.学会分析源码 程序员每天都和代码打交道。经过数年的基础教育和职业培训&#xff0c;大部分程序员都会「写」代码&#xff0c;或者至少会抄代码和改代码。但是&#xff0c;会读代码的并不在多数&#xff0c;会读代码又真正读懂一些大项目的源码的&#xff0c;少之…

线程清理函数

一、线程清理函数 #include <pthread.h> void ptread_clean_push(void (*rtn) (void *), void *arg); 注册清理函数&#xff0c;押栈 void ptread_clean_pop(int excute); 清理函数&#xff0c;出栈 分析&#xff1a;这两个函数是成对出现的…

【大牛疯狂教学】mysqlinnodb和myisam

02 JVM 线程JVM内存区域JVM运行时内存垃圾回收与算法JAVA四种引用类型GC分代收集算法 VS 分区收集算法GC垃圾收集器JAVA IO/NIOJVM类加载器 03 JAVA集合 接口继承关系和实现LISTSETMAP 04 JAVA多线程并发 JAVA并发知识库JAVA线程实现/创建方式4种线程池线程生命周期&#xf…

【大牛疯狂教学】深入拆解java虚拟机百度云

Java基础核心笔记总结 由于篇幅限制&#xff0c;我就只以截图展示目录内容以及部分笔记内容&#xff0c;获取完整版王者级核心宝典只需要点击点赞关注即可获取领取方式&#xff01; 在这个部分我们总结了Java的基础知识&#xff0c;涵盖了&#xff1a;概述、开发环境、开发环境…

【大牛系列教学】docker.service配置文件详情

01 阿里中间件&#xff08;四面&#xff0c;Java岗&#xff09; 1.1 Java中间件一面 技术一面考察范围 重点问了Java线程锁&#xff1a;synchronized 和ReentrantLock相关的底层实现 线程池的底层实现以及常见的参数 数据结构基本都问了一遍&#xff1a;链表、队列等 Java内存…

【大牛系列教学】java面试常考的编程题

1. 面试官&#xff1a;工作中使用过Zookeeper嘛&#xff1f;你知道它是什么&#xff0c;有什么用途呢&#xff1f; 小菜鸡的我&#xff1a; 有使用过的&#xff0c;使用ZooKeeper作为dubbo的注册中心&#xff0c;使用ZooKeeper实现分布式锁。ZooKeeper&#xff0c;它是一个开…

中断的系统调用

系统调用可分为两类&#xff1a;慢速系统调用和其他系统调用 慢速系统调用&#xff1a;可能会使进程永远阻塞的一类&#xff0c;如果在阻塞期间收到一个信号&#xff0c;该系统调用就被中断&#xff0c;不再继续执行(早期)&#xff1b;也可以设定系统调用是否重启。如&#xf…

【好文推荐】java模板引擎性能

01. 基础架构&#xff1a;一条SQL查询语句是如何执行的&#xff1f; MySQL 的逻辑架构图 02. 日志系统&#xff1a;一条SQL更新语句是如何执行的&#xff1f; 之前你可能经常听DBA同事说&#xff0c;MySQL可以恢复到半个月内任意一秒的状态&#xff0c;惊叹的同时&#xff0c;…

函数sigqueue

一、函数sigqueue sigqueue函数原型&#xff1a; 函数作用&#xff1a;新的发送信号系统调用&#xff0c;主要是针对实时信号提出的支持信号带有参数&#xff0c;与函数sigaction&#xff08;&#xff09;配合使用 int sigqueue(pid_t pid, int signo, const union sigval v…

【好文推荐】mysql创建数据库语句utf-8

性能调优 影响MySQLServer 性能的相关因素 商业需求对性能的影响系统架构及实现对性能的影响Query语句对系统性能的影响Schema设计对系统的性能影响硬件环境对系统性能的影响 MySQL 数据库锁定机制 MySQL锁定机制简介各种锁定机制分析合理利用锁机制优化MySQL MySQL数据库Qu…

函数setjump和longjmp

一、主要函数应用 函数setjmp 原型&#xff1a; #include <setjmp.h> Int setjmp(jmp_buf env);返回值&#xff1a;若直接调用则返回0&#xff0c;若从longjmp调用返回则返回非0值的longjmp中的val值 分析&#xff1a; 返回值&#xff1a;若直接调用则返回0&#xf…

java接口的定义与实现实验报告,赶紧收藏备战金三银四!

一、对Kafka的认识 1.Kafka的基本概念 2.安装与配置 3.生产与消费 4.服务端参数配置 二、生产者 1.客户端开发 2.原理分析 3.重要的生产者参数 三、消费者 1.消费者与消费组 2.客户端开发 四、主题与分区 1.主题的管理 2.初识KafkaAdminCilent 3.分区的管理 4.如何…

函数sigsetjump和siglongjump

摘要&#xff1a; 在信号处理函数执行时&#xff0c;会阻塞当前信号。当信号处理函数返回时&#xff0c;系统会帮我们把刚刚阻塞的信号再从阻塞集中移除。一、 临时阻塞特性 当执行信号处理函数的时候&#xff0c;会临时将当前被处理信号阻塞。为了能说明问题&#xff0c;采用…

java操作word文档,深度解析,值得收藏

Java虚拟机内存模型 Java虚拟机内存模型中定义的访问操作与物理计算机处理的基本一致&#xff01; Java中通过多线程机制使得多个任务同时执行处理&#xff0c;所有的线程共享JVM内存区域main memory&#xff0c;而每个线程又单独的有自己的工作内存&#xff0c;当线程与内存区…

java支付模块架构,涨薪7K!

Java基础 JDK 和 JRE 有什么区别&#xff1f; 和 equals 的区别是什么&#xff1f;两个对象的 hashCode()相同&#xff0c;则 equals()也一定为 true&#xff0c;对吗&#xff1f;final 在 java 中有什么作用&#xff1f;java 中的 Math.round(-1.5) 等于多少&#xff1f;Stri…