Есть ли краткий пример того, как использовать prctl (), когда дело доходит до установки подзадач? - PullRequest
1 голос
/ 02 июля 2019

В настоящее время я пытаюсь научиться использовать Linux prctl(PR_SET_CHILD_SUBREAPER) и prctl(PR_GET_CHILD_SUBREAPER).

К сожалению, я не понимаю, что происходит, когда я использую эти функции. Может ли кто-нибудь помочь мне обнаружить ошибку в моем понимании?

Я установил основной процесс как подпочвенный. Затем я попытался использовать fork() для создания дочернего процесса и сделал это снова, чтобы получить процесс внука. Потом я убил дочерний процесс, чтобы посмотреть, что случилось с внуком, но я не могу это проверить.

int main(void) {
    int p = fork();
    prctl(PR_SET_CHILD_SUBREAPER, 1);
    if(p < 0)
        return EXIT_FAILURE;
    if(p > 0){
        //Main process
        printf("I am the MainProcess, My PID: %d and PPID: %d\n", getpid(), getppid());
    }
    else{
        printf("I am the Child, My PID: %d and PPID: %d\n", getpid(), getppid());

        int p2 = fork();
        if(p2 < 0)
            return EXIT_FAILURE;
        if(p2 > 0){
            //still Child process
        }
        else{
            int *reaper = NULL;
            prctl(PR_GET_CHILD_SUBREAPER, reaper);
            printf("I am the Grandchild, My PID: %d and PPID: %d\n", getpid(), getppid());
            printf("Reaper ID: %d\n", *reaper);
            kill(getppid(), SIGKILL);
            printf("I am the Grandchild, My PID: %d and PPID: %d\n", getpid(), getppid());
            prctl(PR_GET_CHILD_SUBREAPER, reaper);
            printf("Reaper ID: %d\n", *reaper);
        }
        return EXIT_SUCCESS;
    }
  return EXIT_SUCCESS;
}

Выход:

I am the MainProcess, My PID: 9088 and PPID: 23010
I am the Child, My PID: 9089 and PPID: 9088
I am the Grandchild, My PID: 9090 and PPID: 9089

К моему удивлению, некоторые printf() вхождения (в части кода granchild) не были вызваны во время выполнения. В чем причина?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...