首页 > 解决方案 > 为什么我会收到两个 SIGCONT 信号?

问题描述

我正在编写一个设置终端属性的程序,所以我必须在脚本退出的任何时候重置终端,包括如果用户按下 ^Z,但是当我用 fg 重新输入命令时,SIGCONT 信号被发送两次,但我只希望它被调用 1 次。为什么会发生两次?这是一个显示问题的简短程序:

#include <stdio.h>
#include <signal.h>
#include <unistd.h>

void sigtstp (int signum) {
    write(1, "got a SIGTSTP\n", 14);
    kill(getpid(), SIGSTOP);
}

void sigcont (int signum) {
    write(1, "got a SIGCONT\n", 14);
}

int main (int argc, char **argv) {
    signal(SIGTSTP, sigtstp);
    signal(SIGCONT, sigcont);
    while (1) {
        sleep(100);
    }
}

输出是这样的:

% clang cont.c -o cont
% ./cont
^Zgot a SIGTSTP
zsh: suspended (signal)  ./cont
% fg
[5]    continued  ./cont
got a SIGCONT
got a SIGCONT
^C

我在 macOS 上使用 zsh。

标签: csignalszsh

解决方案


推荐阅读