当尝试运行 C 程序的多个实例时,Ctrl + C 不起作用

0 c bash shell operating-system

我正在阅读一本有关操作系统的开源教科书,这是第一个代码示例(文件名是“cpu.c”):

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <assert.h>
#include <stdio.h>

int main(int argc, char *argv[])
 {
    if (argc != 2) {
        fprintf(stderr, "usage: cpu <string>\n");
        exit(1);
    }

    char *str = argv[1];

    while (1) {
        sleep(1);
        printf("%s\n", str);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我在终端中运行“./cpu 'A'”时,一切正常,我可以使用 Ctrl + C 终止它。但是,当我使用

./cpu A & ./cpu B & ./cpu C & ./cpu D &
Run Code Online (Sandbox Code Playgroud)

使程序的多个实例运行,并尝试使用 Ctrl + C,代码继续无限期地运行。我在网上看到 Ctrl + Z 可以工作,但没有帮助。有没有办法在不关闭终端的情况下结束4个程序的运行?我已经看过这个,但我不相信它能帮助解决我的问题。

Jon*_*ler 5

您已经在后台运行了 4 个进程,因此 shell 仍在等待您的输入。然而,这些进程并不关注中断信号。

你可以用工作号码杀死他们:

$ ./cpu A & ./cpu B & ./cpu C & ./cpu D &
[1] 9735
[2] 9736
[3] 9737
[4] 9738
$ kill %1 %3
[3] - Terminated               ./cpu A & ./cpu B & ./cpu C & ./cpu D &
[1]   Terminated               ./cpu A & ./cpu B & ./cpu C & ./cpu D &
$ kill %2 %4
[4] + Terminated               ./cpu A & ./cpu B & ./cpu C & ./cpu D &
[2] - Terminated               ./cpu A & ./cpu B & ./cpu C & ./cpu D &
$
Run Code Online (Sandbox Code Playgroud)

当然,我已经抑制了 4 个程序的输出。

由于您已获得进程的 PID,因此您还可以使用带有kill:的 PIDkill 9735 9736 9737 9738来杀死四个后台进程。该kill命令默认发送 SIGTERM 信号。