如何终止在 tmux 中运行的 C 程序?

如何终止在 tmux 中运行的 C 程序?

我正在测试一个 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+ CCtrl+ ZCtrl+ D,全部忽略并且程序继续运行。

答案1

我自己。以下是您解决问题时使用的步骤:

  1. 您没有先将问题分解成几个小问题,然后再尝试调试每个问题。而且您没有提供人们帮助您所需的所有信息(在我看来)。因此,这里是缺失的信息。(正如您自己在评论部分提供的那样):

    [...] 该问题有很多细节,但简而言之,与一个名为 ( 的终端程序有关fswatch,它是通知为了苹果系统关联

    你正在使用终端fswatch-程序中调用-function。那么这个问题显然可以分为两个部分:(1)fswatch和(2)zsh-function。

  2. 让我们尝试一下没有-(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 函数调用终端程序:

    -callfswatch是一个子进程,它不接收中断。

  3. 幸运的是,你认为问题出在步骤 (1)。所以你从 GitHub 仓库中读到了很多问题。fswatch,你发现有人也在函数内部调用了该程序,但语法略有不同:

    while fswatch -10 $src_path; do \
        /* ... details skipped */
    

    并且成功了。现在您获得了想要的行为:C++ 编译的监视模式。恭喜。

正确描述问题对任何人来说都是一个难题。对于给您带来的不便,我深表歉意。

相关内容