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机制貌似被禁用了

  • 相关阅读:
    使用JS实现图片轮播滚动跑马灯效果
    特殊字符和注释标签
    html常用标签总结
    html重点标签总结
    web常用开发工具
    标签分类和关系
    Web标准和骨架
    常用开浏览器内核
    常用浏览器介绍
    2019/08/20记
  • 原文地址:https://www.cnblogs.com/qrlozte/p/4453135.html
Copyright © 2011-2022 走看看