CTRL + C 不会终止 C 脚本

CTRL + C doesn't kill C script

我正在阅读 Operating Systems: Three Easy Pieces,我发现书中没有提到一个问题。

这是 C 脚本:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
/*#include "common.h"*/
#include <unistd.h>
#include <assert.h>


int
main(int argc, char *argv[])
{
    int *p = malloc(sizeof(int));
    assert(p != NULL);
    printf("(%d address pointed to by p: %p\n",
            getpid(), p);
            *p = 0;
            while (1) {
                sleep(1);
                *p = *p +1;
                printf("(%d) p: %d\n", getpid(), *p);
            }
            return 0;
}

它分配一些内存,打印出地址内存,将数字 0 放入其中,最后循环递增该值。

我通过 gcc -o mem mem.c -Wall 编译它,我没有问题 运行 与 ./mem 连接它,如果我按 CRTL+C 它会停止:

但是当我 运行 脚本与命令 ./mem & ./mem 并行执行两次时,问题就来了,看 GIF:

无论我尝试终止进程多少次,脚本都在不停地敲击。

如何杀死我的C哪个项目?

使用fg将后台进程调到前台,然后它会响应Ctrl-C.

您还可以使用 jobs 查看后台作业的编号列表,并使用 kill %<number> 终止特定作业,例如kill %1.