操作系统第6次实验报告:使用信号

本次实验报告详细记录了使用C语言编程实现操作系统中信号(SIGTERM, SIGALRM)的功能。作业1中,成功创建子进程并在5秒后通过SIGTERM信号结束子进程,子进程在结束前循环输出"HelloWorld"。作业2中,设置了5秒的alarm,当闹钟触发后打印提示信息,然后继续挂起直到10秒。实验加深了对进程管理和信号处理的理解。
摘要由CSDN通过智能技术生成

操作系统第6次实验报告:使用信号

 

一、实验目的

通过编程进一步了解信号。

二、实验内容

在服务器上用Vim编写程序,完成以下两个作业:

作业1:发送SIGTERM结束子进程

  • int kill(pid_t pid, int sig);。通过kill函数向包括它本身在内的其他进程发送一个信号

    要求:

  • 在主进程中创建一个子进程

  • 子进程中死循环输出“Hello World”字符串

  • 主进程睡眠5s后,向子进程发送终止信号(SIGTERM)结束子进程

    作业2:发送ALARM、PAUSE

  • unsigned int alarm(unsigned int seconds);调用alarm函数在经过预定时间后发送一个SIGALRM信号

  • pause() stop until signal

    要求:

  • 将进程挂起,5秒后发送一个SIGALRM信号,继续运行。

1. 运行结果

  • 作业1

    是否编译通过?编译已通过并成功生成名为sbr的可执行文件

     

    是否运行结果正确?(逻辑也要正确)可以看到在子进程在5秒内输出五句Hello World后结束

  • 作业2

    是否编译通过?编译已通过并成功生成名为sbrr的可执行文件

    是否运行结果正确?(逻辑也要正确)可以看到我们睡了10秒,在进行到第五秒的时候发送了alarm信号激活了闹钟,闹钟函数结束 后继续睡觉直至第10秒

2. 源代码

作业1

#include<stdio.h>
#include<signal.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>
​
int main() {
    pid_t pid=fork();//创建子进程
    if(pid==0){//进入子进程状态
        while(1){
            printf("Hello World\n");//输出
            sleep(1);//适量降低输出次数
        }
    }
    if(pid>0){//进入父进程状态
            sleep(5);//进入5秒的睡眠,以便子进程的输出
            kill(pid,SIGINT);//实现kill函数,通过SIGINT终止子进程
            printf("子进程已结束!");
    }
    return 0;
}

作业2

#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <stdbool.h>
​
void ala(){
    printf("叮叮叮~闹钟响啦!\n");//发送信号时执行的动作
}
 int main(){
    (void) signal(SIGALRM,ala);//更改SIGALRM信号的默认动作
    alarm(5);//设置闹钟的时常
    for(int i=0;i<10;i++){
        printf("我正在睡觉(~ o ~)-zZ.......\n");
        sleep(1);//适量降低输出次数,同时提示睡眠状态
    }
    return 0;
}

3.总结

学习了系统内置信号的使用,同时也加深巩固了子进程和父进程的创建和使用。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值