c - ज़ोंबी प्रक्रिया बनाएं



linux operating-system (1)

का हवाला देते हुए:

To my understanding, zombie process happens when the parent process exits before
the children process.

ये गलत है। man 2 wait अनुसार man 2 wait (नोट्स देखें):

A child that terminates, but has not been waited for becomes a "zombie".

इसलिए, यदि आप ज़ोंबी प्रक्रिया बनाना चाहते हैं, तो फिर से fork(2) , चाइल्ड-प्रोसेस को exit() जाना चाहिए exit() , और माता-पिता को बाहर निकलने से पहले sleep() चाहिए sleep() , आपको ps(1) के आउटपुट को देखने के लिए समय दें ps(1)

उदाहरण के लिए, आप अपने बजाय नीचे दिए गए कोड का उपयोग कर सकते हैं, और sleep() ps(1) उपयोग करते हुए sleep() आईएनजी:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main(void)
{
    pid_t pid;
    int status;

    if ((pid = fork()) < 0) {
        perror("fork");
        exit(1);
    }

    /* Child */
    if (pid == 0)
        exit(0);

    /* Parent
     * Gives you time to observe the zombie using ps(1) ... */
    sleep(100);

    /* ... and after that, parent wait(2)s its child's
     * exit status, and prints a relevant message. */
    pid = wait(&status);
    if (WIFEXITED(status))
        fprintf(stderr, "\n\t[%d]\tProcess %d exited with status %d.\n",
                (int) getpid(), pid, WEXITSTATUS(status));

    return 0;
}

मैं एक ज़ोंबी प्रक्रिया बनाने में दिलचस्पी है मेरी समझ के लिए, ज़ोंबी प्रक्रिया तब होती है जब बच्चों की प्रक्रिया से पहले माता-पिता की प्रक्रिया समाप्त हो जाती है। हालांकि, मैंने निम्न कोड का उपयोग करके ज़ोंबी प्रक्रिया को पुन: प्रयास करने की कोशिश की:

#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main ()
{
  pid_t child_pid;

  child_pid = fork ();
  if (child_pid > 0) {
    exit(0);
  }
  else {
    sleep(100);
    exit (0);
  }
  return 0;
}

हालांकि, यह कोड निष्पादित करने के तुरंत बाद निकलता है जो अपेक्षित है। हालांकि, जैसा कि मैंने किया है

ps aux | grep a.out

मैंने पाया कि a.out सिर्फ एक सामान्य प्रक्रिया के रूप में चल रहा है, बजाय ज़ोंबी प्रक्रिया की अपेक्षा के मुताबिक

ओएस मैं उपयोग कर रहा हूँ उबुंटू 14.04 64 बिट है





zombie-process