QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 734|回复: 2

请教一个信号问题!

[复制链接]
发表于 2004-5-28 16:28:04 | 显示全部楼层 |阅读模式
下面是我的测试程序:
#include<stdio.h>
#include<stdlib.h>
#include<signal.h>

void catch_sig();

int main(){
        signal(SIG_TYPE,catch_sig);
        pid=fork();
        if(pid>0){
                sleep(1);
                kill(pid,SIGT_TYPE);
                wait();
        }else if(pid==0){
                while(1);
        }
        exit(0);
}

void catch_sig(int signo){
                printf("child quit!\n");
                fflush(stdout);
                exit(1);
}

当SIG_TYPE=SIGTERM时,结果为:  child quit!(程序退出)
当SIG_TYPE=SIGKILL  时,结果为:  没有输出结果(程序退出)
当SIG_TYPE=SIGSTOP时,结果为:  没有输出结果(程序不退出)

这是为什么啊?
发表于 2004-5-28 22:43:39 | 显示全部楼层
signal的函数原型为“int signal(int sig, _sighandler_t handler);”,第一个参数sig指要处理的信号类型,它可以取除了SIGKILL和SIGSTOP以外的任何一种信号!所以在你的程序中对这两种信号不会有任何响应的。
回复

使用道具 举报

 楼主| 发表于 2004-5-29 00:50:47 | 显示全部楼层
谢谢了!
我做这个程序时,本打算让父进程发送SIGKILL给子进程,子进程捕获后,进行一下善后处理就退出! 但是子进程总是无法捕获到SIGKILL,让我郁闷了半天,后来改用SIGUSR1才搞定,但是我总是不理解为什么会这样,看书真是太粗心了,居然没看到这一点!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 05:57 , Processed in 0.039000 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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