c - 为什么我会收到两个 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。
解决方案
推荐阅读
- contacts - 如何从 gnome 联系人中导出联系人列表
- python - Python 的 Counter 是哈希映射吗?
- android - Xamarin.Android 中 `FirebaseMessaging.Instance.GetToken` 方法的 Xamarin.iOS 对应项
- sql - 缺少所有存储过程的索引
- r - 在R中的一个图上组合折线图和条形图,ggplot2
- ssis - 使用非平面文件数据源动态读取 SSIS 包中的 CSV
- python - 我想从 2 个嵌套列表中减去元素
- firebase-realtime-database - Firebase 实时数据库到 Firestore
- excel - 在 Excel VBA 中为不同的目标值添加多个范围
- tags - 如何使用 NextJs 安装 LinkedIn Insight 标签