终止进程但并未关闭

终止进程但并未关闭

我编写了一个 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 的内容。僵尸进程不使用除进程表槽之外的任何系统资源。

相关内容