我正在编写一个程序,通过 vim 打开 .txt 文件,每当我按 CTRL+C 时,该进程就会被终止。但问题是我找不到我刚刚创建的进程的 pid 并杀死它。有谁能够帮助我?
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
void ctrl_C(int sig){
system("kill -9 $(pidof id)");
printf("\n You pressed Ctrl + C,Good Bye \n");
exit(0);
}
int main(){
printf("I am Programmer \n");
pid_t id = system("gnome-terminal -- vi abcd.txt");
signal(SIGINT,ctrl_C);
while(1){}
}
您的代码存在多个问题:
-
system(3)
不返回子进程的 PID,而是等待它退出,并返回其退出代码。您需要使用传统的 fork+exec 方法。
- 有了子PID,调用起来更方便
kill(2)
than kill(1)
- 最好加上
sleep
处于死循环等待输入。这会减少 CPU 负载和电费。
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
pid_t child_id;
void ctrl_C(int sig){
kill(child_id, 9);
printf("\n You pressed Ctrl + C,Good Bye \n");
exit(0);
}
int main(){
printf("I am Programmer \n");
pid_t child_id = fork();
if (child_id == 0) {
execlp("gnome-terminal", "gnome-terminal", "--", "vi", "abcd.txt", NULL);
return 255;
}
signal(SIGINT,ctrl_C);
while (1) {
sleep(1);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)