- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 cygwin 来测试 Linux 系统编程。我的问题是在使用信号时。我想创建 n 个进程,当父进程收到子进程发送的信号 SIGALRM 时,父进程将杀死这些进程。每个 child 都会发送一个警报,因此将发送 n 个警报,并且应杀死 n 个 child 。
我在执行程序时遇到问题,但我不知道是我做错了什么还是 cygwin 无法做到这一点。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
int nb;
pid_t* p;
void handler(int s) {
signal(s, handler);
for(int i=0; i<nb; i++) {
printf("%d killed\n", p[i]);
kill(p[i], SIGQUIT);
}
}
int main(int arc, char* argv[]) {
signal(SIGALRM, handler);
int n=atoi(argv[1]);
nb=n;
p=(pid_t*)malloc(nb*sizeof(pid_t));
for(int i=0; i<nb; i++) {
if((p[i]=fork())==0) {
printf("child : %d\n", getpid());
alarm(1);
for(;;);
exit(0);
}
}
printf("parent : %d\n", getpid());
pause();
exit(0);
}
有了这个, children 应该退出,但当我执行时,我遇到了一些奇怪的事情:
$ ./a.out 5
child : 1048
child : 1049
child : 1050
child : 1051
parent : 1047
child : 1052
0 killed
Stack trace:
Frame Function Args
000FFFFC7D0 00180060BE9 (00000000000, 000FFFFCE00, 000FFFFC9D8, 000FFFFDE50)
00000000002 00180062ABA (00000000000, 001800FE6C8, 000FFFFC9B0, 00000000000)
000FFFFCBD0 00180128550 (00000000000, 001800FE6C8, 000FFFFC9B0, 00000000000)
000FFFFCBD0 001004011C4 (00000000000, 00000000000, 00000000000, 00000000000)
000FFFFC5E0 001004011C4 (7FFBE56E6A08, 00000000000, 3734EC77843980, 000FFFFC830)
000FFFFC830 00068040004 (7FFBE56E6A08, 00000000000, 3734EC77843980, 000FFFFC830)
End of stack trace
Stack trace:
Frame Function Args
000FFFFC7D0 00180060BE9 (00000000000, 000FFFFCE00, 000FFFFC9D8, 000FFFFDE50)
Stack trace:
Frame Function Args
00000000002 00180062ABA000FFFFC7D0 00180060BE9 (00000000000 (00000000000, 000FFFFCE00Stack trace:
Frame Function Args
, 001800FE6C8000FFFFC080 00180060BE9, 000FFFFC9B0, 00000000000)
000FFFFCBD0 00180128550 (00000000000 (00000000000, 000FFFFCE00, 000FFFFC288, 001800FE6C8, 000FFFFDE50, 000FFFFC9B0)
, 00000000000)
000FFFFCBD0 001004011C4 (00000000000, 00000000000, 00000000000, 00000000000)
00000000002 00180062ABA, 000FFFFC9D8, 000FFFFDE50)
00000000002 00180062ABA (00000000000 (00000000064, 001800FE6C8Stack trace:
Frame Function Args
, 000FFFFC9B0, 00000000000)
000FFFFCBD0 00180128550 (00000000000000FFFFC5E0 001004011C4 (7FFBE56E6A08, 001800FE6C8, 00000000000, 000FFFFC9B0000FFFFC7D0 00180060BE9 (00000000000, 0000000017C, 00000000000, 3734EC77862237, 000FFFFC830, 00000000000, 000FFFFCE00)
, 00000000000)
, 000FFFFC9D8000FFFFCBD0 001004011C4 (00000000000, 00000000000, 00000000000, 000FFFFDE50, 00000000000)
000FFFFC830 00068040004)
000FFFFC5E0 001004011C4 (7FFBE56E6A08, 00000000000)
(7FFBE56E6A0800000000002 00180062ABA (00000000000000FFFFC360 00180130B1B (000FFFFC514, 001800FE6C8, 00000000000, 3734EC77862237, 000FFFFC830, 3734EC778A3B1B, 00000000001, 000FFFFC830, 000FFFFC9B0)
, 00000000000, 00100000000)
End of stack trace
, 00000B74440000FFFFC830 00068040004 (7FFBE56E6A08, 00000000000)
, 3734EC778A3B1B)
000FFFFCBD0 00180128550 (00000000000, 000FFFFC830, 001800FE6C8)
, 000FFFFC9B0End of stack trace
000FFFFC700 0018012CAAE, 00000000000)
(7FFBE56EC859000FFFFCBD0 001004011C4, 00000000001 (00000000000, 7FFBE56E3533, 00000000000, 00000000001, 00000000000, 00000000000)
000FFFFC5E0 001004011C4)
(7FFBE56E6A08000FFFFC5F0 0018012CE7F, 00000000000 (00100000000, 3734EC7788519E, 000FFFFC830, 00000000000, 0018021E2DC, 0000000000D)
)
000FFFFC7E0 0018012CFDC000FFFFC830 00068040004 (000FFFFC7D0 (7FFBE56E6A08, 000FFFFC830, 00000000000, 3734EC7788519E, 000FFFFC830)
End of stack trace
, 000FFFFC780, 00000000003)
000FFFFC7E0 0018012D180 (00000000000, 00010000000, 00000002000, 00000000138)
000FFFFC7E0 0018012842B (00000000000, 00010000000, 00000002000, 00000000138)
000FFFFC7E0 001004010EF (00180240A28, 001800FE3B0, C85632670B110000, 0018027EF00)
00010000000 00180062ABA (00000000000, 001800FE6C8, 000FFFFC9B0, 00000000000)
000FFFFCBD0 00180128550 (00000000000, 001800FE6C8, 000FFFFC9B0, 00000000000)
000FFFFCBD0 001004011C4 (00000000000, 00000000000, 00000000000, 00000000000)
000FFFFC5E0 001004011C4 (001E56E6A08, 0C800000000, 00600048640, 00600048970)
000FFFFC830 00068040004 (001E56E6A08, 0C800000000, 00600048640, 00600048970)
End of stack trace
Quit (core dumped)
我可以解决这个问题吗?
最佳答案
我通过使用 SIGKILL 而不是 SIGQUIT 解决了这个问题
关于无法在 cygwin 中使用 SIGQUIT 终止子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55429328/
所以我是一个编程新手,我想写一个带有时间倒计时的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
我是一名优秀的程序员,十分优秀!