Завершение процесса, но он не закрывается

Я написал программу на 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);
    }
}

Image

0
задан 22 May 2021 в 16:30

1 ответ

Процесс остается в таблице процессов до вызова wait() в родительском процессе (это называется "состояние зомби") или до выхода родительского процесса, в этом случае он перенаправляется в systemd (бывший init), который выполняет wait() для таких осиротевших процессов.

Зомби-процесс фактически умер, но его запись в таблице процессов содержит статистику производительности и будет существовать до тех пор, пока родительский процесс не соберет ее с помощью wait(). Их можно обнаружить с помощью ps -eO stat и поискать в колонке stat вещи с буквой Z. Зомби-процессы не используют никаких системных ресурсов, кроме слота в таблице процессов.

0
ответ дан 28 July 2021 в 11:39

Другие вопросы по тегам:

Похожие вопросы: