- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在编写一个有两个 for 循环的程序,在第一个 for 循环期间(仅打印 1-5 并在其间休眠 1 秒)SIGINT 和 SIGQUIT 将被阻止,在第二个 for 循环中仅 SIGINT 将被阻止阻止。我成功地阻止了第一个 for 循环的正确信号,然后在第二个 for 循环中,我尝试从被阻止中删除 SIGQUIT 但两个信号似乎仍然被阻止。
这是我目前拥有的:
#include <unistd.h>
#include <stdio.h>
#include <wait.h>
#include <signal.h>
#include <string.h>
void hd1(int sig){
if(sig == SIGINT){
printf(" SIGINT Recieved\n");
}else if(sig == SIGQUIT){
printf(" SIGQUIT Recieved\n");
}
}
int main(){
sigset_t new_set;
sigset_t old_set;
//struct sigaction act;
//memset(&act, 0, sizeof(act));
//act.sa_handler = hd1;
//sigaction(SIGINT, &act, 0);
//sigaction(SIGQUIT, &act, 0);
sigemptyset(&new_set);
sigaddset(&new_set, SIGINT);
sigaddset(&new_set, SIGQUIT);
sigprocmask(SIG_BLOCK, &new_set, &old_set);
for(int i = 1; i <= 5; i++){
printf("%d\n", i);
sleep(1);
}
sigdelset(&new_set, SIGQUIT);
for(int i = 1; i <= 5; i++){
printf("%d\n", i);
sleep(1);
}
}
我曾尝试使用 sigprocmask
解锁并使用 setmask 重置掩码,但是当我解锁信号时它会在循环后终止程序。
最佳答案
只需使用 sigprocmask();
第二次。并使用 SIG_SETMASK
SIG_SETMASK The set of blocked signals is set to the argument set.
sigdelset(&new_set, SIGQUIT);
sigprocmask(SIG_SETMASK, &new_set, NULL);
关于c - 阻塞和解除阻塞 SIGINT 和 SIGQUIT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47059627/
所以我是一个编程新手,我想写一个带有时间倒计时的2048游戏。当时间到了,定时器应该使用pthread_kill()来结束runTheGame(),这是玩游戏的函数。 我搜索了互联网,他们告诉我使用
下面的程序非常简单:它每半秒输出一个点。如果它收到一个SIGQUIT,它会输出十个Q。如果它收到一个 SIGTSTP (Ctrl-Z),它会输出十个 Z 如果它在打印 Q 时收到一个 SIGTSTP,
我想从我的代码中启动计算器应用程序,用sigint-2中断它显示它已被中断,再次启动它,然后用sigquit-9退出它,想法是在C代码中中断它所以不需要按 Ctrl+C 或 Ctrl+ Write a
我想通过终端向我的程序发送 SIGQUIT。 首先什么是SIGQUIT信号? ctrl+c 还是其他?其次,我如何捕获该信号来打印一些消息(我说的是Linux) 最佳答案 SIGQUIT 通常用于终止
我正在尝试编写一个函数来在进程上安装信号处理程序,以便在第一次调用该信号时忽略 SIGQUIT 信号,然后在第二个 SIGQUIT 信号时退出。我打算使用计数器的全局变量来计算 SIGQUIT 信号发
我试图忽略子线程的第一个 SIGQUIT...具体来说,在每次调用后写入控制台并在第二次调用时退出。 我试过这段代码的变体;即每个类似的堆栈溢出线程分成两个函数。不幸的是,对于 child 的处理程序
我有一个主进程,它通过 UNIX 套接字与子进程进行通信。当主进程收到 SIGQUIT 时,我无法写入子套接字。我希望子进程知道主进程正在退出并优雅地退出。 SIGQUIT 陷阱之外的通信按预期完美工
我正在实现键盘扩展。但有时它在启动时会遇到 SIGQUIT 信号。 情况如下: 点击textView,出现键盘 点击任意位置并隐藏键盘 更改为另一个应用 点击textView并等待键盘出现 崩溃!!!
我正在尝试将一些 C 软件移植到 win32,但我不知道如何处理 SIGQUIT 信号。我检查了 Mingw 的 signal.h,它不支持 SIGQUIT(或 SIGHUP 就此而言,但我假设我可以
我在处理 stdin 和 sigquit 信号时遇到了问题。任务是忽略 sigquit 信号。一切都很好,除了所有“读取”缓冲区都消失了,我不知道如何避免它。这是我的代码: #include #in
我正在使用 cygwin 来测试 Linux 系统编程。我的问题是在使用信号时。我想创建 n 个进程,当父进程收到子进程发送的信号 SIGALRM 时,父进程将杀死这些进程。每个 child 都会发送
我可以编写捕获 SIGINT 的 shell 脚本,但我似乎无法捕获 SIGQUIT。 #!/bin/bash function die { echo "Dying on signal $1"
我正在编写一个有两个 for 循环的程序,在第一个 for 循环期间(仅打印 1-5 并在其间休眠 1 秒)SIGINT 和 SIGQUIT 将被阻止,在第二个 for 循环中仅 SIGINT 将被阻
我正在编写一个需要用以下 bash 行终止的多线程程序: killall -QUIT -w procname 我决定使用一个线程来接收一些我需要处理的信号,比如 SIGQUIT 和 SIGUSR1,而
击键 Ctrl + \ 导致 python 和 ipython 核心转储并立即退出。我怎样才能防止这种情况发生?我不想禁用按键或重新映射键盘。 我最近换用了英式键盘,反斜杠/竖线键(我习惯在 Ente
有时 Ctr-C (SIGINT) 和 Ctrl-\ (SIGQUIT) 都太弱了。有没有一种方法可以使用快速键盘快捷键对当前连接的进程进行更积极的终止(例如 kill -9)? 最佳答案 如果您是
我正在尝试解决一个问题,因为我正在学习在 C 中使用系统调用。我使用的是 Ubuntu 12.04 64 位。 问题的陈述说我需要实现一个代码,允许在其他命令 (cmd1) 正确结束后执行命令 (cm
知道如何在没有 JDK 的情况下生成 java heapdump 吗?我能够获取 processid,但我无法直接访问机器,并且没有安装 JDK。 You can alternatively use
我有这个: ping -q xxx.xxx.xxx.xxx & disown; pingpid=$! for run in {1..3}; do sleep 5 stats+=$(kill -
这个问题在这里已经有了答案: How to capture Control+D signal? (9 个回答) 关闭 6 年前。 脚本: echo $$ trap "echo \"hai\"" 3
我是一名优秀的程序员,十分优秀!