gpt4 book ai didi

c - 带循环的程序不会用 CTRL + C 终止

转载 作者:太空狗 更新时间:2023-10-29 16:20:59 24 4
gpt4 key购买 nike

我有一个程序我想运行直到被用户按 CTRL + C 中断。当我按下它时没有任何反应,我只能通过挂起它并在之后手动终止它来终止程序。

这是需要无限运行的代码部分:

while(true) {
liveOrDie(field);
printOut(field);
}

第一个函数计算是将 1 还是 0 放入二维数组中,第二个函数使用 for 循环将其打印出来,如下所示:

void printOut(int field[38][102]) {
for(int i = 0; i < 38; i++) {
for(int j = 0; j < 102; j++) {
if(field[i][j] == 1) {
cout << "o";
}
else {
cout << " ";
}
}
cout << endl;
}

system("sleep .1");
}

使用了 sleep ,因此有足够的时间在屏幕被清除之前将所有内容打印出来。

所以,程序不会被 Ctrl+C 终止。什么可能导致此行为,以及如何使程序在 Ctrl+C 后终止?

最佳答案

来自documentation system()(强调/加粗):

The system() library function uses fork(2) to create a child process that executes the shell command specified in command using execl(3) as follows:

   execl("/bin/sh", "sh", "-c", command, (char *) 0);

system() returns after the command has been completed.

During execution of the command, SIGCHLD will be blocked, and SIGINT and SIGQUIT will be ignored, in the process that calls system() (these signals will be handled according to their defaults inside the child process that executes command).

这解释了你的行为。

关于c - 带循环的程序不会用 CTRL + C 终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25502117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com