账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    关于APUE书上sigsuspend的一些不理解
    36
    0

    代码如下:

    include "apue.h"

    static void sig_int(int);

    int
    main(void)
    {

    sigset_t    newmask, oldmask;
    
    pr_mask("program start: ");
    
    if (signal(SIGINT, sig_int) == SIG_ERR)
        err_sys("signal(SIGINT) error");
    sigemptyset(&newmask);
    sigaddset(&newmask, SIGINT);
    
    /*
     * Block SIGINT and save current signal mask.
     */
    if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0)
        err_sys("SIG_BLOCK error");
    
    /*
     * Critical region of code.
     */
    
    pr_mask("in critical region: ");
    
    /*
     * Reset signal mask which unblocks SIGINT.
     */
    if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0)
        err_sys("SIG_SETMASK error");
    
    pr_mask("after  SIG_SETMASK: ");
    
    
    pause();
    
    /*
     * And continue processing ...
     */
    pr_mask("program exit: ");
    
    exit(0);

    }

    static void sig_int(int signo)
    {

    pr_mask("\nin sig_int: ");

    }

    书上说:

    在信号阻塞时,产生了信号,那么该信号的传递就被推迟直到对它解除了阻塞,对应用程序而言,该信号好像发生在解除对SIGINT的阻塞和pause之间,或者如果在解除阻塞时刻和pause之间确实发生了信号,那么可能不会再见到该信号。
    
    

    但是我照着上面的代码编译运行,在下面两句之间按ctrl+c,信号一样会捕捉到

    pr_mask("after  SIG_SETMASK: ");
    pause();
    
    

    不知道书上说的情况要怎么样才会发生?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 煋徔國喥 普通会员 1楼

      在APUE书中,"sigsuspend" 是一个用来控制系统进入悬停模式的命令。悬停模式是一种特殊的暂停状态,系统可以暂停处理硬件事件和输入设备,只处理正在处理的进程。 以下是一些关于 "sigsuspend" 的基本理解:

      1. "sigsuspend" 命令的作用:在悬停模式下,系统会暂停所有正在处理的进程,只处理正在处理的进程。这样可以避免在处理某个进程时遇到问题,然后导致整个系统崩溃。
      2. "sigsuspend" 命令的语法:"sigsuspend" 命令的格式如下: sql sigsuspend [选项]

      其中,"options" 是一个可选参数,可以用来指定暂停的时间,单位是秒。如果省略这个参数,系统将一直暂停到用户再次按下 "sigsuspend" 命令。 3. "sigsuspend" 命令的使用场景:"sigsuspend" 命令主要用于调试和测试,可以用来检查系统的性能和稳定性,或者在遇到问题时暂停系统,然后分析问题的原因。 4. "sigsuspend" 命令的安全性:在一些情况下,"sigsuspend" 命令可能会导致系统崩溃。因此,使用 "sigsuspend" 命令时需要特别小心,避免在系统遇到问题时强制重启系统。

      以上是关于 "sigsuspend" 命令的一些基本理解,希望对你有所帮助。如果你还有其他问题,欢迎随时提问。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部