swjtu操作系统实验:Linux软中断通信

实验目的

了解Linux软中断(Signal)的工作原理。在Linux上使用C语言编写一个包含信号处理机制的程序,在该程序中可以安装自己的信号处理程序;在此基础上发送一个对应的信号,验证自己安装的信号处理程序是否被正常执行,从而加深对信号处理机制的理解。

程序代码
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>

void sig_handler(int signum) {
    printf("Received signal %d\n", signum);
}

int main() {
    // 安装信号处理程序
signal(SIGINT, sig_handler);// sighandler_t signal(int signum, sighandler_t handler)
    /*handler 表示信号的处理方式,有三种情况:SIG_IGN:忽略参数signum所指的信号;一个自定义的处理信号的函数名,信号的编号为这个自定义函数的参数;SIG_DFL:恢复参数signum所指信号的处理方法为默认值。*/	
//signum 表示信号的编号,SIGINT对应键盘中断 ctrl + c

    pid_t pid=getpid();
    printf("Program is running...\n");

sleep(10); 
//参数以秒为单位,等待一段时间继续执行,直到达到参数指定时间或是被信号所中断

printf("sent signal by kill\n");//kill方式发送信号
kill(pid,2);//函数原型int kill(pid_t pid, int sig)
/*pid>0 将信号传给进程号为pid 的进程,=0将信号传给和目前进程相同进程组的所有进程,发送信号者进程也会收到自己发出的信号。=−1 将信号广播传送给系统内所有的进程。*/
//sig 为准备发送的信号代码。SIGINT的整数值为2
//kill成功执行时,返回 0;失败时返回-1。

    printf("Program is exiting...\n");
    return 0;
}

 实验截图,按下ctrl c

 说明:按下ctrl+c时,信号处理程序执行,打印出了SIGINT对应的信号编码2,接着kill函数向当前进程发送SIGINT信号,再次执行信号处理程序,打印出了SIGINT对应的信号编码2。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guts350

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值