Linux系统信号量实验

【实验目的】
学习 signal 的函数的使用
【实验原理】
利用 signal 的函数的机制来实习我们发送截获信号的功能
【实验内容】
修改上面的程序,增加语句 signal(SIGINT,SIG_IGN)和语句 signal(SIGQUIT,SIG_IGN),再观察程序执
行时屏幕上出现的现象,并分析其原因。
<参考程序>

# include<stdio.h>
# include<signal.h>
# include<unistd.h>
int pid1, pid2;
int EndFlag = 0;
pf1 = 0;
pf2 = 0;
void IntDelete()
{
kill(pid1, 10);
kill(pid2, 12);
EndFlag=1;
}
void Int1()
{
printf(“child process 1 is killed by parent !\n”);
exit(0);
}
void Int2()
{
printf(“child process 2 is killed by parent !\n”);
exit(0);
}
main()
{
int exitcode;
signal(SIGINT, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
while ((pid1 = fork()) == -1);
if (pid1 == 0)
{
signal(SIGUSR1, Int1);
//signal(SIGINT, SIG_IGN);
pause();
exit(0);
}
else
{
while ((pid2 = fork()) = = -1);
if (pid2 == 0)
{
signal(SIGUSR2, Int2);
//signal(SIGINT, SIG_IGN);
pause();
exit(0);
}
else
{
signal(SIGINT, IntDelete);
waitpid(-1, &exitcode, 0); /*等待任何子进程中断或结束*/
printf(“parent process exit\n”);
exit(0);
}
}
}

【 实验要求】 】
运行程序并分析结果。
司机售票员问题(选做题)
创建子进程代表售票员,父进程代表司机 ,同步过程如下:
售票员捕捉 SIGINT(代表开车),发 SIGUSR1 给司机,司机打印(“let’s gogogo”)
售票员捕捉 SIGQUIT(代表停车),发 SIGUSR2 给司机,司机打印(“stop the bus”)
司机捕捉 SIGTSTP(代表车到总站),发 SIGUSR1 给售票员,售票员打印(“please get off
the bus”)

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

STM32单片机定制

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

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

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

打赏作者

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

抵扣说明:

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

余额充值