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

  • 相关阅读:
    会计基础-资本与资本公积核算
    FORM 基本控件2
    EBS form的一些知识
    EBS功能安全性基本原理
    主物料界面数据来源
    organization --form 表单中organization 数据来源
    form 相关
    jar/war/ear文件的区别
    ORACLE判别字段是否包含中文
    亲测可用:SecureCRT 7 注册码/序列号
  • 原文地址:https://www.cnblogs.com/qrlozte/p/4453135.html
Copyright © 2020-2023  润新知