当前位置:  技术问答>linux和unix

信号传递问题,详情麻烦进来看~!

    来源: 互联网  发布时间:2016-02-21

    本文导语:  父进程创建两个子进程,每个子进程用signal设置中断信号,等待父进程发送信号。父进程在接到键盘上的Ctrl+Z后向子进程发信号,两个子进程收到信号后分别执行handler1和handler2 代码如下: #include  #include #include #includ...

父进程创建两个子进程,每个子进程用signal设置中断信号,等待父进程发送信号。父进程在接到键盘上的Ctrl+Z后向子进程发信号,两个子进程收到信号后分别执行handler1和handler2
代码如下:
#include 
#include
#include
#include
#include

pid_t p1,p2;//子进程的pid号

void handler()
{
 kill(p1,16);
 wait(0);
 kill(p2,SIGINT);
 wait(0);
 return;
}

void handler1()
{
 printf("Child process1 is Killed by Parent!n");
 return;
}

void handler2()
{
 printf("Child process2 is Killed by Parent!n");
 return;
}
main()
{
 while((p1=fork())==-1);//创建子进程1
 if(p1==0)
 {
 printf("The pid of child 1 is:%dn",p1=getpid());
 signal(16,handler1);
 sleep(5);
 }
else
{
while((p2=fork())==-1);//创建子进程2
if(p2==0)
{
printf("The pid of child 2 is:%dn",p2=getpid());
signal(SIGINT,handler2);
sleep(5);
}
else
{
printf("The pid of father is:%dn",getpid());
printf("waiting command...n");
signal(20,handler);//父进程设置信号量,等待键盘输入
pause();//键盘输入ctrl+z后,执行handler
printf("Parent is Killed !n");
}
}
}
 
按Ctrl+Z后没反应,貌似kill都没有执行。不知道是什么原因?大家帮忙看看。。。谢谢了。。

|
这样的,由父进程创建的子进程,如果没有特别设置,是和父进程处于同一个进程组的,由控制终端按键产生的信号,会同时发送给这个进程组内的每个进程的.再则,你在子进程能sleep内是用的sleep(5),这样也可能产生,还没等到你按键,子进程就已经退处的情况.

你把
signal(16,handler1);
  sleep(5); 

signal(SIGINT,handler2);
sleep(5); 

换成
signal(16,handler1);
setsid();          //设置进程的进程组为以新进程组,该进程为进程组长.
pause(); 


signal(SIGINT,handler2);
setsid();
pause();

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 进入信号处理函数,是不是会自动把进入信号加入信号屏蔽字?还有sigpending
  • 学习linux的新手问:linux进程信号掩码以及信号阻塞与信号未决怎么理解?
  • 关于信号量与UNIX信号的疑问
  • 生产者消费者问题为什么不可以共用一个信号量,如果这个信号量可以设置取值固定为0到N,即当信号量取值为N的时候阻塞进程,是否也可以?
  • 当信号量(灯)遇上信号,help!
  • 请问什么时候发出SIGKILL信号、什么时候发出SIGTERM信号?
  • 安全信号和不安全信号的实现机制有什么不同么?
  • 如何确定信号的来源?即如何知道接收到的信号来自于哪一个进程号?
  • 自旋锁和读写自旋锁、信号量和读写信号量分别有什么区别?
  • 关于消息队列信号量信号共享内存等核心编程的问题(求知若渴!!!.....)
  • 可靠信号和不可靠信号的问题
  • semaphore.h sem.c Posix 信号量 System v 信号量
  • 【求助】linux/Unix下创建子进程,向父进程发送信号,子进程也能收到改信号,此时如何让子进程不收到信号
  • 信号可靠还是不可靠,取决与信号本身还是signal()/sigaction()的区别?
  • 信号处理函数里面用CRT函数可能导致"信号触发-处理"死循环吗?
  • 终端被关闭后,bash收到哪些信号,这些信号是怎么来的?
  • 书上说,中断用自旋锁,进程,用信号量,但是,为什么中断不能用信号量?
  • linux 中信号量的使用 当信号初始化的时候设置的值大于1将是如何?
  • 大侠们求指导,电信骨干网光纤信号分流成多个千兆网信号
  • 32号信号和33号信号哪里去拉?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3