• [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
    ", 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] == '
    ')
                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
    ", (long)pid);
            printf("%% ");
        }
        
        exit(0);
    }
    
    void sig_int(int signo)
    {
        printf("sig_int: interrupt
    %% ");
        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机制貌似被禁用了

  • 相关阅读:
    zoj 3644 Kitty's Game
    Planets
    hdoj 2571 命运
    (理论篇)IOC概述和Unity的使用
    重温设计模式之单例模式
    重温设计模式之观察者
    重温设计模式之装饰者
    (理论篇)PetShop全概述
    (理论篇)petshop中缓存运用之我见
    (理论篇)cookie,session,viewstate,cache
  • 原文地址:https://www.cnblogs.com/qrlozte/p/4453135.html
Copyright © 2020-2023  润新知