linux(信号)实验

合集下载

Linux操作系统实验实验报告

Linux操作系统实验实验报告

L i n u x操作系统实验实验报告Document number:NOCG-YUNOO-BUYTT-UU986-1986UT实验1:安装Linux系统【实验目的和要求】:安装Linux系统,掌握操作系统的系统配置,建立应用环境的过程。

【实验内容】:1、首先在windows系统中安装虚拟机。

在网上找到VMwareWorksttionPro版本,确定安装目录。

一直下一步,不需要太多的说明。

2、图为安装完成后的界面。

3、然后在阿里巴巴开源镜像网站下载centos系统镜像,然后虚拟机创建新的虚拟机,进行一些简单的虚拟机设置,设置了网络链接nat模式等等。

安装完成后的界面实验2:Linux下c语言开发【实验目的】:学会和掌握用c语言开发一个应用程序的全过程,包括,编译,调试等等。

【实验步骤】:首先在系统中查看是否已经安装有gcc,输入查看命令发现没有,于是需要安装gcc。

在centos系统中可以使用比较简便的yum命令。

在之前已经配置好了yum源。

直接输入yuminstallgcc。

回车自动安装程序和需要的依赖包。

因为虚拟机中和电脑很多地方切换使用不方便,所以安装了xshell软件。

图为xshell中的截图。

安装完毕。

然后使用vi或者vim编写运行,在屏幕上打印出hello,world。

实验3:进程创建【实验目的和要求】1.了解进程的概念及意义;2.了解子进程和父进程3.掌握创建进程的方法。

【实验内容】1.子进程和父进程的创建;2.编写附件中的程序实例【实验步骤】一1、打开终端,输入命令,在文件中输入中的代码;2、输入命令,回车后显示无错误;3、输入命令:./1_fork运行程序。

二、1、打开终端,输入命令,在文件中输入中的代码;2、输入命令,回车后显示无错误:3、输入命令:./2_vfork运行程序。

从上面可以看到两次的运行结果不一样。

我们知道write函数是不带缓存的。

因为在fork之前调用write,所以其数据写到标准输出一次。

linux实验报告

linux实验报告

linux实验报告实验目的:通过对Linux操作系统的实践,掌握基本的Linux命令和操作方法,了解Linux操作系统的特点和优势。

实验一:Linux环境搭建在实验一中,我们首先需要搭建Linux操作系统的环境。

根据实验指导书的要求,我们选择了Ubuntu作为实验平台。

通过下载Ubuntu镜像文件,并利用虚拟机软件创建一个虚拟机,将镜像文件安装到虚拟机中。

在安装过程中,我们需要选择合适的分区和网络配置等,并设置root用户的密码。

实验二:基本命令的使用在实验二中,我们主要学习了Linux的基本命令的使用方法。

首先,我们了解了Linux文件系统的结构,包括根目录、用户目录、系统目录等。

然后,通过命令行终端进行一系列的实践操作,比如查看文件内容、创建目录、复制文件等。

这些命令的使用不仅提高了我们的工作效率,同时也增强了对Linux操作系统的理解。

实验三:软件安装与卸载实验三主要涉及到Linux的软件安装与卸载。

我们首先学习了使用APT工具进行软件包管理,通过安装命令行界面的方式安装了一些常用的软件,比如文本编辑器、终端工具等。

此外,我们还学习了如何卸载已安装的软件包,清理不需要的文件,以保持系统的整洁性。

实验四:权限管理在实验四中,我们学习了Linux的权限管理机制。

Linux操作系统采用了基于用户和组的权限模型,通过设置文件和目录的权限,实现对文件的读、写、执行的控制。

我们通过实际操作,创建了新的用户和组,并为不同的用户和组设置了不同的权限。

这样,可以有效地保护系统的文件和数据的安全性。

实验五:网络配置与服务搭建在实验五中,我们主要学习了Linux的网络配置和服务搭建。

通过设置网络接口、IP地址和网关等参数,实现了网络的正常连接。

同时,我们还学习了一些常用的网络命令,比如ping、ssh等。

此外,我们尝试搭建了一个简单的Web服务器,通过浏览器访问,可以查看服务器上的网页。

实验六:系统监控和故障恢复在实验六中,我们学习了Linux的系统监控和故障恢复方法。

实验八-Linux进程间通信——管道与信号

实验八-Linux进程间通信——管道与信号
}
if((fd = open("file.fifo",O_RDWR)) == -1){ printf("open FIFO failed\n"); exit(2);
} if((rtn = write(fd,argv[1],strlen(argv[1]) + 1)) == -1){
printf("write failed\n"); exit(3);
int fd; char info[128] = {0}; if((fd = open("file.fifo",O_RDWR)) == -1){
printf("open FIFO failed\n"); exit(1); }
if(read(fd,info,sizeof(info)) == -1){ printf("read failed\n"); exit(2);
}
if((fd = open("file.fifo",O_RDWR)) == -1){ printf("open FIFO failed\n"); exit(2);
} if((rtn = write(fd,argv[1],strlen(argv[1]) + 1)) == -1){
printf("write failed\n"); exit(3); } pause(); return 0; }
《嵌入式操作系统应用开发》 课程实验报告
班 级: **************** 学 号: ************* 姓 名:************** 指导老师: *************** 成 绩:

实验1~4进程间通信、信号量、死锁

实验1~4进程间通信、信号量、死锁

西安邮电大学(计算机学院)课内实验报告实验名称:进程间通信/信号量/死锁专业名称:班级:学生姓名:学号(8位):指导教师:实验日期:一.实验目的及实验环境(一)实验环境CPU:Intel Core i3 2.30 GHz内存:2.0 GB操作系统:LINUX(二)实验目的实验1 掌握linux基本命令和开发环境1. 掌握编译环境gcc及跟踪调试工具gdb2. 掌握常用的linux shell命令3. 掌握编辑环境vim实验2 进程通过观察、分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在posix规范中fork和kill系统调用的功能和使用。

实验3 线程通过观察、分析实验现象,深入理解线程及线程在调度执行和内存空间等方面的特点,并掌握线程与进程的区别。

掌握posix规范中pthread_creat()函数的功能和使用方法。

实验4 互斥通过观察、分析实验现象,深入理解互斥锁的原理及特点掌握在posix 规范中的互斥函数的功能及使用方法。

二.实验内容(一)实验21. 填写代码:1)建立child_proc_number个子进程,要执行:proc_number = i;do_something(); 父进程把子进程的id保存到pid[i] 。

2)向pid[ch-'0']发信号SIGTERM,杀死该子进程。

3)杀死本组的所有进程。

2. 实验过程先猜想一下这个程序的运行结果。

假如运行“./process 20”,输出会是什么样?然后按照注释里的要求把代码补充完整,运行程序。

可以多运行一会儿,并在此期间启动、关闭一些其它进程,看process的输出结果有什么特点,记录下这个结果。

开另一个终端窗口,运行“ps aux|grep process”命令,看看process究竟启动了多少个进程。

回到程序执行窗口,按“数字键+回车”尝试杀掉一两个进程,再到另一个窗口看进程状况。

linux 实验报告

linux 实验报告

linux 实验报告Linux 实验报告一、引言Linux 是一种自由和开放源代码的操作系统,广泛应用于服务器领域。

本次实验旨在通过实际操作和观察,了解 Linux 操作系统的基本特点和使用方法。

二、实验环境本次实验使用的是 Ubuntu 20.04 LTS 版本,该版本是一种基于 Debian 的 Linux 发行版。

实验所需的硬件配置包括一台支持虚拟化技术的计算机和足够的内存和存储空间。

三、实验步骤1. 安装 Linux 操作系统使用虚拟机软件,在计算机上创建一个虚拟机,并选择 Ubuntu 20.04 LTS 镜像文件进行安装。

按照安装向导的提示,完成操作系统的安装过程。

2. 熟悉 Linux 操作界面Linux 操作系统的界面与 Windows 等操作系统有所不同。

在登录后,我们可以看到一个类似命令行的界面,称为终端。

在终端中,可以通过输入命令来执行各种操作。

3. 文件和目录管理Linux 使用一种层次化的文件系统来管理文件和目录。

通过命令行,我们可以创建、删除、复制、移动和重命名文件和目录。

例如,使用 "mkdir" 命令创建一个新目录,使用 "ls" 命令查看当前目录的内容。

4. 用户和权限管理Linux 是一个多用户操作系统,每个用户都有自己的账户和密码。

管理员可以通过命令行创建、删除和管理用户账户。

此外,Linux 还使用权限来控制对文件和目录的访问。

通过修改权限,可以限制用户对特定文件的操作。

5. 网络配置Linux 支持各种网络配置,可以连接到局域网或互联网。

通过命令行,我们可以配置网络接口、设置IP 地址和网关等。

此外,Linux 还提供了一些网络工具,用于测试网络连接和诊断网络问题。

6. 软件安装和管理Linux 拥有丰富的软件资源,可以通过包管理器来安装和管理软件。

在Ubuntu 中,我们可以使用 "apt" 命令来安装、更新和删除软件包。

Linux实验总结分析报告

Linux实验总结分析报告

Linux实验总结分析报告Linux体系架构Linux操作系统主要涉及⽂件管理、内存管理、进程管理、系统中断等等。

进程管理Linux进程的存在两种运⾏模式,在Linux⾥,⼀个进程既可以运⾏⽤户程序,⼜可以运⾏操作系统程序。

当进程运⾏⽤户程序时,称其为处于“⽤户模式”;当进程运⾏时出现了系统调⽤或中断事件,转⽽去执⾏操作系统内核的程序时,称其为处于“核⼼模式”。

在Linux⾥处理机就具有两种运⾏状态:核⼼态和⽤户态。

Linux下进程概念及特征:(1)、在Linux⾥,把进程定义为“程序运⾏的⼀个实例”(2)、进程⼀⽅⾯竞争并占⽤系统资源(⽐如设备和内存),向系统提出各种请求服务;进程另⼀⽅⾯是基本的调度单位,任何时刻只有⼀个进程在CPU上运⾏。

Linux进程实体的组成:Linux中,每个进程就是⼀个任务(task),⼀般具有以下四个部分:(1)进程控制块(在Linux⾥,也称为进程描述符。

)。

(2)进程专⽤的系统堆栈空间;(3)供进程执⾏的程序段(在Linux⾥,称为正⽂段);(4)进程专⽤的数据段和⽤户堆栈空间Linux的进程控制块——进程描述符在Linux中,进程的进程描述符是⼀个结构类型的数据结构:task_struct。

进程描述符组成内容进程标识(pid);进程状态(state);进程调度信息,包括调度策略(policy)、优先级别(priority和rt_priority)、时间⽚(counter)等;接收的信号(*sig);进程家族关系;进程队列指针; CPU的现场保护区;与⽂件系统有关的信息。

Linux的进程状态 Linux的进程可以有五种不同的状态进程状态:可运⾏状态可中断状态不可中断状态暂停状态僵死状态进程的创建与撤销:Linux中的每个进程,都有⼀个创建、调度运⾏、撤销死亡的⽣命期。

Linux系统中的各个进程,相互之间构成了⼀个树型的进程族系。

Linux的进程调度类型:在Linux中,进程调度被分为实时进程调度和⾮实时进程调度两种。

实验四 linux进程通信

修改后得到如下结果:
2、进程的管道通信
3、信号量实现进程同步
特点
Unix早期版本
在进程间通信方面表现较弱,利用pipe来传递大量数据
Unix system V版本
由三部分组成:消息(用于进程之间传递分类的格式化数据)、共享存储器(使得不同进程通过共享彼此的虚拟空间而达到互相对共享区操作和数据通信的目的)、信号量(机制用于通信进程之间的同步控制。信号量通常与共享储存器方式一起使用。)
实验报告
姓名
学号
专业班级
课程名称
操作系统实验
实验日期
成绩
指导教师
批改日期Biblioteka 实验名称实验四linux进程通信
一、实验目的:
1、理解信号和管道的概念及实现进程间通信的原理。
2、掌握和使用消息对流实现进程间的通信。
3、掌握和使用信号量实现进程同步。
4、掌握使用共享主存实现进程间的通信。
二、实验要求:
IPC版本
Linux
完整继承了system V进程间通信IPC
三、实验内容和步骤:
1、利用信号机制实现进程软中断通信
经过以上步骤,查阅相关资料,我学习到两点知识:
1、警告与错误是两个概念,警告存在的情况下程序仍能编译通过,但有错误就不可以。
2、exit与return功能相似,但主要用于非main函数中,正常执行即返回0值。

linux进程间通信实验心得

linux进程间通信实验心得随着对Linux系统的深入了解,我对进程间通信(IPC)的重要性有了更深刻的认识。

在这次实验中,我通过实际操作,掌握了多种Linux进程间通信的方法,并对它们的特点和应用场景有了更清晰的了解。

实验过程中,我主要接触了三种主要的进程间通信方法:管道(Pipe)、信号(Signal)和共享内存(Shared Memory)。

每种方法都有其独特的特点和使用场景。

管道是最基本的进程间通信方式,它允许父子进程之间进行通信。

通过管道,一个进程可以将数据写入到管道中,而另一个进程可以从管道中读取数据。

我在实验中创建了多个进程,并通过管道实现了它们之间的数据传递。

虽然管道简单易用,但它的通信能力有限,只能用于父子进程或兄弟进程之间的通信。

信号是一种异步的进程间通信方式,一个进程可以向另一个进程发送信号。

接收进程可以根据信号的类型采取不同的行动。

我在实验中通过信号实现了进程间的控制和同步。

虽然信号可以用于任何两个进程之间的通信,但由于它是异步的,使用起来需要小心处理信号的捕获和处理。

共享内存是一种高效的进程间通信方式,它允许多个进程访问同一块内存空间。

通过共享内存,进程可以快速地读写数据,避免了数据在进程间传递的开销。

我在实验中创建了多个进程,让它们共享一块内存区域,并通过读写共享内存实现了数据的快速传递。

共享内存的优点是通信速度快,但需要处理好同步和互斥问题,以避免数据冲突和错误。

通过这次实验,我对Linux进程间通信有了更深入的了解。

在实际应用中,需要根据具体的需求和场景选择合适的进程间通信方法。

同时,我也认识到进程间通信的复杂性和挑战性,需要仔细考虑和处理各种可能的问题。

在未来的学习和工作中,我将继续深入学习Linux系统及其相关技术,不断提高自己的技能和能力。

同时,我也将关注新技术的发展和应用,保持对行业的敏感度和竞争力。

linux网络配置实验报告

linux网络配置实验报告《Linux网络配置实验报告》在现代社会中,网络已经成为人们生活和工作中不可或缺的一部分。

而对于Linux操作系统用户来说,正确的网络配置是保证网络连接稳定和安全的关键。

本文将介绍一次针对Linux网络配置的实验报告,帮助读者更好地理解和掌握Linux网络配置的方法和技巧。

实验目的:本次实验旨在通过对Linux系统网络配置的实际操作,加深对网络配置命令和配置文件的理解,掌握Linux系统下网络配置的基本方法和技巧。

实验环境:操作系统:Ubuntu 20.04 LTS网络环境:局域网实验步骤:1. 查看网络接口信息首先,我们需要查看系统中已有的网络接口信息,可以通过命令“ifconfig”或“ip addr”来查看当前系统中的网络接口信息,包括接口名称、IP地址、子网掩码等。

2. 配置静态IP地址接下来,我们将尝试配置一个静态IP地址,以确保系统在局域网中能够稳定地连接到其他设备。

通过编辑“/etc/netplan/00-installer-config.yaml”文件,我们可以配置静态IP地址、子网掩码、网关等信息。

3. 配置DNS服务器在网络连接过程中,DNS服务器的配置也非常重要。

我们可以通过编辑“/etc/resolv.conf”文件或者“/etc/netplan/00-installer-config.yaml”文件来配置系统所使用的DNS服务器信息。

4. 测试网络连接最后,我们需要测试配置的网络连接是否生效。

可以通过ping命令测试与其他设备的连接情况,或者使用浏览器访问网页来确认网络连接是否正常。

实验总结:通过以上实验,我们对Linux系统下的网络配置有了更深入的了解。

正确的网络配置可以确保系统在局域网中稳定地连接到其他设备,并且能够正常访问互联网。

同时,合理的网络配置也能够提高系统的安全性,避免一些网络攻击和威胁。

希望通过本次实验报告,读者们能够更好地掌握Linux网络配置的方法和技巧,为自己的系统配置一个稳定、安全的网络环境。

linux进程控制与信号互斥实验报告

重庆交通大学信息科学与工程学院综合性设计性实验报告班级:物联网15xx班姓名学号:gllh实验项目名称:进程控制与信号互斥实验项目性质:综合性实验所属课程:《Linux操作系统》实验室(中心):语音楼801信息实验室指导教师:xx实验完成时间: 201x年xx月xx日一、实验目的理解Linux核心进程及信号量的概念、进程的调度和进程通信以及信号量在进程控制中的作用。

本次实验的目标是在Linux环境下实现一个多线程对临界资源的互斥操作,利用信号量实现对临界资源的保护,支持Linux下文件输入输出,提高对Linux环境下进程、信号量机制和文件操作等知识的理解。

二、实验内容及要求在程序中调用semget()函数实现信号量创建,用semop()函数来改变信号量的值,用semctl()函数打开一个信号量。

进行分析、编写、调试——对比分析,熟悉semget()函数和信号量的概念、定义、调用及函数返回值。

1、编写程序,创建信号量或获得在系统中已存在的信号量,掌握信号量semaphore 在进程管理中的应用。

2、编写程序,验证信号量对于进程间通信机制的改变。

3、编写程序,分析信号量函数对一个文件共享资源操作的控制。

三、实验设备及软件PC机一台,Linux虚拟机一台。

四、设计方案1. 题目Linux中信号量对进程间通信的影响。

2. 设计的主要思路在编程过程中对信号量函数进行调用和进程创建,主要以对文件操作的形式进行对信号量函数的调用,并分析信号量在进程控制中的作用,并熟悉信号量函数的概念、定义、调用及函数返回值。

3. 主要功能实现对文件的读写操作以及进程间如何使用信号量来进行通信。

4. 主要的流程图五、主要代码#include<unistd.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<sys/ipc.h>#include<sys/sem.h>#include <stdlib.h>#include <stdio.h>#include <string.h>void main(){intfd=0;key_t key;intsemid;char buffer[100];structsembuf sops;int ret;key=ftok("/home",1);semid=semget(key,1,IPC_CREAT);ret=semctl(semid,0,GETV AL);semctl(semid,0,SETV AL,1);printf("init value of sem is %d\n",ret);fd=open("./board.txt",O_RDWR|O_APPEND);sops.sem_num=0;sops.sem_op=-1;semop(semid,&sops,1);write(fd,"wulian1 ",8);sleep(10);write(fd,"have a rest",11);sops.sem_num=0;sops.sem_op=1;semop(semid,&sops,1);int fd2=open("./board.txt",O_RDONL Y);memset(buffer,0,sizeof(buffer));while(read(fd2,buffer,sizeof(buffer))>0){printf("%s\n", buffer);memset(buffer, 0, sizeof(buffer));}close(fd2);}六、测试结果及说明1、semget()函数它的作用是创建一个新信号量或取得一个已有信号量,函数为:int semget(key_t key, int num_sems, int sem_flags);第一个参数key是整数值,进程可以通过它访问一个信号量,它代表程序可能要使用的某个资源。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四
学生姓名
程建松
学号
0094015
同组人
实验项目
信号
指导教师
蒋剑
实验日期及节次
2011.10.19
必修选修
1.实验目的及要求
掌握linux的文件操作
2.实验仪器、设备或软件
Redhat linux系统盘,VMWARE软件,
3.实验内容
1.编写一个程序,分别用新、老两种方法捕捉CTRL+Z键,然有打印“I have caught the key‘ctrl+z’”后退出。
}
return;
}
int main(){
pid_t pid,pid1;
sigset_t mask;
sigfillset(&mask);
sigdelset(&mask,SIGUSR1);
sigdelset(&mask,SIGUSR2);
pid1=getpid();
pid=fork();
signal(SIGUSR1,doing);
sigfillset(&action.sa_mask);
action.sa_flags=SA_SIGINFO;
sigaction(SIGTSTP,&action,NULL);
printf("the process for main function is %d\n",getpid());
for(;;);
printf("the signo is:%d\n",signum);
printf("the signal number of ctrl+z is:%d\n",sip->si_signo);
exit(0);
}
main(){
struct sigaction action;
action.sa_sigaction=dosig;
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
void dosig(int signum,siginfo_t* sip,void * notused){
printf("I have caught the key!\n");
sigfillset(&mask);
sigfillset(&mask1);
sigfillset(&mask2);
sigdelset(&mask1,SIGUSR1);
sigdelset(&mask2,SIGUSR2);
sigdelset(&mask,SIGINT);
if((pid1=fork())<0){
i=atoi(argv[1]);
if(argc==3)
j=atoi(argv[2]);
printf("process id is %d\n",getpid());
value.it__sec=i;
等待信号;
处理信号;
}
注意pause()和for(;;)死循环在等待信号时的区别。
在作业二中注意sleep()的使用。
第一题:
.编写一个程序,分别用新、老两种方法捕捉CTRL+Z键,然有打印“I have caught the key‘ctrl+z’”后退出。
#include<signal.h>
#include<stdio.h>
printf("son is over!\n");
exit(1);
}
else{
kill(pid,SIGUSR1);
pause();
printf("parent has received the SIGUSR2!\n");
exit(1);
}
}
第三题:由signal()/alarm()/pause()三个函数组合实现sleep的功能。编写一个名为sleepx.c的程序,该程序产生的可执行文件sleepx的执行格式为:sleep N(其中N为睡眠的秒数)。
for(m=0;m<j;m++)
printf("the break number is %s\n",ch);
break;
}
}
}
}
int main(int argc,char *argv[])
{
struct itimerval value,ovalue;
int i;
signal(SIGALRM,doing);
}
[root@localhost ~]# gcc -o catch2 catch2.c
[root@localhost ~]# ./catch2
the process for main function is 23249
I have caught the key!
the signo is:20
the signal number of ctrl+z is:20
alarm(n);
pause();
printf("%d seconds is over!\n",n);
return 0;
}
第四题:编写一个程序,实现:父进程创建两个子进程,然后父进程通过signal()来捕捉键盘发出的CTRL+C键,当按下CTRL+C键后,父进程分别向两个子进程发出SIGUSR1和SIGUSR2,两个子进程收到信号后分别打印“child1 is killed by parent!”
#include<unistd.h>
#include<stdio.h>
#include<signal.h>
#include<sys/types.h>
#include<stdlib.h>
#include<sys/time.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<errno.h>
}
[root@localhost ~]# gcc -o catch1 catch1.c
[root@localhost ~]# ./catch1
I have caught key
the signo is:20
[root@localhost ~]#
使用Sigaction函数:
#include<signal.h>
[root@localhost ~]#
第二题:编写一个程序,用SIGUSR1作为父子进程间通信的信号,父进程先向子进程发出信号,子进程收到信号后打印“Son has received the signal!”,然后子进程向父进程也发出一个信号,然后退出;父进程收到信号后,打印“Father has received the signal!”,然后退出。
#include<unistd.h>
#include<stdio.h>
#include<signal.h>
#include<sys/types.h>
#include<stdlib.h>
void doing(int signo){
if(signo==SIGALRM)
printf("use alarm!\n");
printf("error\n");
exit(1);
}
else if(pid1==0){
sigprocmask(SIG_BLOCK,&mask1,NULL);
signal(SIGUSR1,doing);
pause();
printf("child1 is killed by parent!\n");
exit(1);
#include<stdlib.h>
void dosig(int signum){
printf("I have caught key\n");
printf("the signo is:%d\n",signum);
exit(0);
}
main(){
signal(SIGTSTP,dosig);
for(;;);
#include<unistd.h>
#include<stdio.h>
#include<signal.h>
#include<sys/types.h>
#include<stdlib.h>
void doing(int signo){
if(signo==SIGINT)
printf("parent have catch the ctr+c\n");
if(signo==SIGUSR1)
printf("I have catch the SIGUSR1\n");
if(signo==SIGUSR2)
printf("I have catch the SIGUSR2\n");
}
int main(){
pid_t pid1=1,pid2=1;
sigset_t mask,mask1,mask2;
“child2 is killed by parent!”,父进程等待两个子进程都退出后,输出“parent is finished”退出。
相关文档
最新文档