LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 924|回复: 4

为什么不能给子进程注册信号??

[复制链接]
发表于 2004-11-23 00:23:51 | 显示全部楼层 |阅读模式
有如下:
void sig_usr(int sig)
{
  if(sig == SIGUSR1)
    printf("SIGUSR1 received!\n");
}
int main(void)
{
    pid_t pid;
    if((pid=fork()) < 0)
        perror("Fork error!\n");
    else if(pid == 0){
             printf("In Child...\n");
             signal(SIGUSR1,sig_usr);
             while(1){};
          }else{
                //kill(pid,SIGUSR1);
          }
     while(1)
     {};
}

运行后ctrl-z把父子进程放到后台。
但是用kill -USR1 [子进程id]发现子进程没收到SIGUSR1的信号。
另外,如果试图在父进程里kill(pid,SIGUSR1)给子进程发信号的话,子进程根本没运行到!
求解!
谢谢
发表于 2004-11-23 08:35:46 | 显示全部楼层
while(1){}用的很可疑,把子进程的while(1){} 改成 pause()或while(1)pause();父进程的while(1){} 改成 waitpid()试试看?

父进程要用kill()前最好先sleep一下,等子进程的signal()确实执行了
 楼主| 发表于 2004-11-23 12:03:43 | 显示全部楼层
先谢过,第二个问题能说的具体点吗?我好像也注意到了!但不太明白
发表于 2004-11-23 12:15:00 | 显示全部楼层
父子进程同时执行,父进程的kill有可能比子进程的signal执行的早,当父进程发出信号时子进程的信号处理函数还没有注册,当然就不会打出你想要的结果了。
 楼主| 发表于 2004-11-23 14:09:10 | 显示全部楼层
好的,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表