操作系统实验三:信号通信

目录

目录

二、实验环境 

三、相关知识

1.进程通信

(1)、低级通信和高级通信

(2)、直接通信和间接通信

2.相关Linux函数

四、源代码

五、执行结果


一、实验内容

利用信号通信机制在父子进程及兄弟进程间进行通信。

父进程创建一个有名事件,由子进程发送事件信号,父进程获取事件信号后进行相应的处理。

二、实验环境 

Linux操作系统

三、相关知识

1.进程通信

各个进程交换信息的过程就是进程通信的过程。进程通信可分为低级通信和高级通信,直接通信和间接通信。

(1)、低级通信和高级通信

①低级通信:只能传递状态和整数值(控制信息),包括实现进程互斥和同步所采用的信号量和管程机制都属于这种方式。

②高级通信:能够传送大批量数据。

(2)、直接通信和间接通信

①直接通信:信息由发送方直接传递给接收方。

②间接通信:将收发双方进程之外的共享数及结构作为通信中转,实现通信,如消息队列。

2.相关Linux函数

(1)、signal()函数:设置某一信号对应动作。

头文件:#include <signal.h>

函数原型:sighandler_t signal(int signum,sighandler_t handler);

第一个参数:signum:指明了要处理的信号的类型。

第二个参数:handler:描述了与信号关联的动作。

返回值:返回先前的信号处理函数指针,若有错误返回SIG_ERR(-1)。

常见信号:SIGINT:终止进程    SIGKILL:kill信号    SIGUSR1:用户自定义信号1。

(2)、信号发送函数:kill()

头文件:#include <signal.h>

#include <sys/types.h>

函数原型:int kill(pid_t pid,int signo);

参数说明:pid:接收信号的进程的进程号。

                    Signo:发送的信号值。

四、源代码

#include <unistd.h>
#include <signal.h>
#include <wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
void sigchld_handler(int sig){
    printf("pid here is %d\n",getpid());
    printf("process recived a signal sucessfully\n");
}
void main(){
    pid_t id=fork();//create child process
    if(id==0){
        //child process
        printf("I am child process.My pid is %d\n",getpid());
        kill(getppid(),SIGUSR2);//child process send the signal to parent signal 
        sleep(1);
        exit(1);
    }
    else if(id>0){
        //parent process
        signal(SIGUSR2, sigchld_handler);//set the signal
        waitpid(id,NULL,0);//wait child process
        printf("I am parent process,my pid is %d\n",getpid());
    }
    else{
        printf("fork error!\n");
        exit(1);
    }
}

五、执行结果

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
一、 实验目的 1、通过实验了解和熟悉Linux系统管理; 2、掌握用户和组管理命令; 3、掌握软件包安装命令和步骤; 4、掌握网络通信管理命令; 5、掌握进程管理命令; 6、掌握系统的服务管理命令; 7、掌握磁盘操作管理命令。 二、 开发工具和运行环境 1、虚拟机VMware 2、Linux操作系统 实验内容 1、了解和熟悉Linux系统管理 2、用户和组管理命令 (1)帐户管理命令: useradd、 usermod、 passwd、userdel (2)组帐户管理命令: groupadd、 groupdel. gpasswd 3、软件包安装命令和步骤 (1) RPM 包的安装 安装RPM包的基本命令格式是: rpm -ivh (2) RPM 包的删除 删除RPM包的基本命令格式是: rpm -e (3) RPM 包的查询 rpm - qa (4) RPM 包的升级 升级RPM包的基本命令格式是: rpm -Uvh (5) RPM包的验证 验证RPM包的基本命令格式是: rpm -V [参数] (6)建立TAR包 有两种方式: -种是建立普通的TAR包,只打包,不压缩 tar cvf 另一种是打包并压缩,选项是“zcvf”,其中“z”代表使用“gzip” 程序 进行文件的压缩 tar zcvf (7)查询TAR包 在释放TAR包之前,查看TAR包中的文件内容。其格式如下: tar ztf (8)释放TAR包 它也分为解非压缩和压缩包两种方式,命令格式如下: tar zxvf 4、网络通信管理命令 (1)hostname命令:显示及设置主机名。 (2)ifconfig命令:显示当前活动的(或指定的)网卡设置。 其格式为: ifconfig [网卡设备名] 重新设置网卡的IP地址,-般由root用户进行设置。其格式为: Ifconfig 网卡设备名 IP 地址 (3) ping命令:网络测试命令 ping [-c报文数] 目的主机地址 (4)write命令:实时给其他用户发送消息 write username [tty] (5)wall命令:以广播方式向系统中的所有用户发送消息 wall message (6)mail 命令:双方用户不同时在线时,使用mai发送和接收消息 mail username mail -s topic username<filename 查看邮件使用mail命令,输入邮件编号以查看邮件 5、进程管理命令 (1)at命令:定时任务命令 (2)ps命令:进程查看命令 ps -ef ps -axu (3)free命令:显示系统内存的使用情况,包括内存总量、已经使用内存数量,空闲内存数量等信息。 (4) top命令:实时监控系统进程。 (5)sleep 命令:用于使进程延迟一段时间再执行。 其格式为: sleep time; command (6)kill命令:来杀死程序产生的进程来结束程序的运行。 格式1 : kill PID 格式2 : kill -9 PID “-9”为SIGKILL信号,属于强制结束 (7)前台与后台运行相关命令 command、command & 6、系统的服务管理命令 (1) runlevel 命令:显示系统当前和上一次的运行级别 (2) init 命令:转换服务的运行级别 init n (3)systemctl 命令:系统服务管理 查看系统服务启动状态。其格式: systemctl list-unit-files --type service 列出所有处于激活状态的服务。其格式为: systemctl list-units --type service --all 服务状态控制。其格式: systemctl [status/start/stop/ restart/reload] name.service 服务开机自启控制。其格式: systemctl [enable/di sable] name.service 7、磁盘操作管理命令 (1)查看系统磁盘分区情况命令: Fdisk -l (2)使用命令手工挂载 mount命令:查看所有挂载设备 mount [-t fs-type] [-o option] device mountpoint 例: mount /dev/cdrom /mnt/cdrom (注意,先要建立挂载目录,并保证设备存在) (3)卸载 umount [device] [dir]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值