signal()处理程序立即被触发

时间:2014-11-02 14:06:02

标签: c signals

尝试使用this function实施流程中断处理 以下代码在OS X 10.10上运行:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include "sys/wait.h"

sig_t terminate(){
    printf("Thanks for the fish!\n");
    exit(EXIT_SUCCESS);
}

int main(int argc, const char * argv[]) {
    signal(SIGINT, terminate());
    while (1){
        printf("P");
    }    
}

问题是,运行程序后立即调用terminate函数。手段,一个看不到一个P,但只看到一行Thanks for the fish!。我做错了什么?

2 个答案:

答案 0 :(得分:4)

传递函数名称而不是调用函数

signal(SIGINT, terminate );

此外,signal采用类型为

的函数指针
void handler_function (int parameter);

答案 1 :(得分:3)

您的信号处理程序与所需原型不匹配。您应重新定义terminate()int为参数并返回void

即,

void terminate(int sig) {
    printf("Thanks for the fish!\n");
    exit(EXIT_SUCCESS);
}

// ...
signal(SIGINT, terminate);