我正在测试一个 C 程序,其中有如下部分:
#include <iostream>
#include <unistd.h>
#define LOOP_MAX 100
int main() {
for (int i = 0; i < LOOP_MAX; i++) {
printf("%d\n", i);
sleep(1);
}
return 0;
}
运行时,i
计数到之前无法停止100
。这是什么原因?
我已尝试:Ctrl+ C,Ctrl+ Z,Ctrl+ D,全部忽略并且程序继续运行。
答案1
我自己。以下是您解决问题时使用的步骤:
您没有先将问题分解成几个小问题,然后再尝试调试每个问题。而且您没有提供人们帮助您所需的所有信息(在我看来)。因此,这里是缺失的信息。(正如您自己在评论部分提供的那样):
[...] 该问题有很多细节,但简而言之,与一个名为 ( 的终端程序有关
fswatch
,它是通知为了苹果系统。关联你正在使用终端
fswatch
-程序中调用嘚-function。那么这个问题显然可以分为两个部分:(1)fswatch
和(2)zsh-function。让我们尝试一下没有-(2) 首先。如果你只运行以下命令会怎样:
fswatch -o0 "$src_path" | while read -d ""; do \ make for outfile in $( find ./${out_path}/*.${out_expr} ); do \ $outfile; done done
正如你所发现的:这个命令确实不是问题和 OP 一样——可以通过Ctrl+中断C。根据这一事实,我们可以确认罪魁祸首是在步骤 (2) 上,即通过 zsh 函数调用终端程序:
-call
fswatch
是一个子进程,它不接收中断。幸运的是,你认为问题出在步骤 (1)。所以你从 GitHub 仓库中读到了很多问题。
fswatch
,你发现有人也在函数内部调用了该程序,但语法略有不同:while fswatch -10 $src_path; do \ /* ... details skipped */
并且成功了。现在您获得了想要的行为:C++ 编译的监视模式。恭喜。
正确描述问题对任何人来说都是一个难题。对于给您带来的不便,我深表歉意。