Parent Terminates Before Child Code In Linux Operating System

All QuestionsCategory: Operating SystemParent Terminates Before Child Code In Linux Operating System
Anonymous asked 3 years ago
1 Answers
Anonymous answered 3 years ago

Parent Terminates Before Child: Scenario-1

#include <unistd.h>

int main() {
int ret;
printf("welcome..pid=%d\n", getpid());
ret = fork();
if (ret < 0) {
perror("fork");
exit(1);
}
if (ret == 0) {
printf("child--welcome,pid=%d,ppid=%d\n", getpid(), getppid());
sleep(2); //Intentional delay in child
printf("wakes up,pid=%d,ppid=%d\n", getpid(), getppid());
exit(0);
} else // ret>0
{
printf("parent--hello,pid=%d,ppid=%d\n", getpid(), getppid());
}
return 0;
}

 
Parent Terminates Before Child: Scenario-2

#include <unistd.h>
#include <stdio.h>

int main() {
  pid_t ret
int i, max = 100;
  printf("welcome..pid=%d\n", getpid());
  ret = fork();
  if (ret < 0) {
    perror("fork");
    exit(1);
  }
  if (ret == 0) {
    printf("child--welcome,pid=%d,ppid=%d\n", getpid(), getppid());
    for (i = 1; i <= max+5; i++) {
     printf("wakes up,pid=%d,ppid=%d\n", getpid(), getppid());
sleep(1); //usleep(1000*100)
}
    exit(0);
  } else // ret>0
  {
    printf("parent--hello,pid=%d,ppid=%d\n", getpid(), getppid());
    for (i = 1; i <= max; i++) {
      printf("parent--%d\n", i);
sleep(1);
}
  }
  return 0;
}

 
Observations & Understanding
 

  • What is the ppid of child
    • After wake up from sleep (Post parent termination) in first examples
    • Towards last 4-5 iterations in child’s for loop in second example (max vs max + 5)
  • Have you observed that shell prompt came in between, before the completion of child’s output
  • Any disadvantages of parent terminates before child process?
  • Is it possible to prevent parent termination before the completion of child process?