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
.
我正在阅读 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
.