[linux]signal函数不起作用

#include "apue.h"



#include <sys/wait.h>



static void sig_int(int); /* our signal-catching function */



int main(int argc, char *argv[])

{

    printf("uid = %d, gid = %d\n", getuid(), getgid());

    

    char buf[MAXLINE]; /* from apue.h */

    pid_t pid;

    int status;

    

    

    // register the signal handler

    if ( signal(SIGINT, sig_int) == SIG_ERR)

        err_sys("signal error");

    

    printf("%% "); /* print prompt (printf requires %% to print %) */

    while (fgets(buf, MAXLINE, stdin) != NULL) {

        if (buf[strlen(buf) - 1] == '\n')

            buf[strlen(buf) - 1] = 0; /* replace newline with null */

        if ((pid = fork()) < 0) {

            err_sys("fork error");

        } else if (pid == 0) { /* child */

            execlp(buf, buf, (char *)0);

            err_ret("couldn't execute: %s", buf);

            exit(127);

        }

        /* parent */

        if ((pid = waitpid(pid, &status, 0)) < 0)

            err_sys("waitpid error");

        printf("Last pid: %ld\n", (long)pid);

        printf("%% ");

    }

    

    exit(0);

}



void sig_int(int signo)

{

    printf("sig_int: interrupt\n%% ");

    exit(0); // I add this line to exit the program through CTRL+C (SIGINT), CTRL+D is to terminate the program

}

代码来自APUE Figure1.10

我编译之后用gdb调试,发现sig_int始终不会被调用

最后终于发现问题是因为编译选项加了-g,在调试状态下signal机制貌似被禁用了

你可能感兴趣的:(Signal)