我编写了一个 C 程序,它创建一个打开文件的进程.txt
,当我按Ctrl+时C,它将关闭该进程并打印出一条消息,但我遇到了一个大问题。我创建的进程在我终止时不会关闭:
#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("\nYou pressed Ctrl + C,Good Bye \n");
signal(SIGINT, SIG_DFL);
kill(child_id, SIGINT);
}
int main(){
printf("I am Programmer \n");
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);
}
}
答案1
该进程将一直保留在进程表中,直到您调用wait()
父进程(这称为“僵尸状态”)或直到父进程也退出,在这种情况下,它将被重新指定为 systemd(以前称为 init)的父进程,由其wait()
对这些孤立进程执行此操作。
僵尸进程实际上已经死亡,但其进程表条目包含性能统计信息,并将一直存在,直到父进程使用 wait() 收集它们。您可以使用 ps -eO stat 发现这些,并在 stat 列中查找带有 Z 的内容。僵尸进程不使用除进程表槽之外的任何系统资源。