vfork() system call

自作多情 提交于 2019-12-22 06:41:44

问题


I read that the new process created using vfork() system call executes as a thread in the parent's address space and until the child thread doesnot calls exit() or exec() system call, the parent is blocked. So I wrote a program using vfork() system call

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

int main()  
 {  
      pid_t pid;  
      printf("Parent\n");  
      pid = vfork();  
      if(pid==0)  
      {  
          printf("Child\n");  
      }  
      return 0;  
  }

I got the output as follows:

 Parent  
 Child  
 Parent  
 Child  
 Parent  
 Child  
 ....  
 ....  
 ....

I was assuming that the return statement must be calling the exit() system call internally so I was expecting the output as only

Parent  
Child

Can somebody explain me why actually it is not stopping and continuously printing for infinite loop.


回答1:


You should read the man page for vfork very carefully:

The vfork() function has the same effect as fork(2), except that the behavior is undefined if the process created by vfork() either modifies any data other than a variable of type pid_t used to store the return value from vfork(), or returns from the function in which vfork() was called, or calls any other function before successfully calling _exit(2) or one of the exec(3) family of functions.

(above is from the POSIX part of the man page, so applies (potentially) to other environments than Linux).

You're calling printf and returning from the child, so the behavior of your program is undefined.



来源:https://stackoverflow.com/questions/6071670/vfork-system-call

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!