zoukankan      html  css  js  c++  java
  • [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机制貌似被禁用了

  • 相关阅读:
    2019届宝鸡理数质检Ⅱ解析版
    随机事件的概率
    三视图
    求曲线的轨迹方程
    组合法破解二项式系数问题
    二项式定理
    计数原理
    HBase的Shell命令
    HBase伪分布安装
    HBase基础知识
  • 原文地址:https://www.cnblogs.com/qrlozte/p/4453135.html
Copyright © 2011-2022 走看看