vfork() 系统调用
我读到使用 vfork() 系统调用创建的新进程作为父进程地址空间中的线程执行,直到子线程不调用 exit() 或 exec() 系统调用,父进程将被阻止。所以我使用 vfork() 系统调用编写了一个程序,
#include <stdio.h>
#include <unistd.h>
int main()
{
pid_t pid;
printf("Parent\n");
pid = vfork();
if(pid==0)
{
printf("Child\n");
}
return 0;
}
我得到的输出如下:
Parent
Child
Parent
Child
Parent
Child
....
....
....
我假设 return 语句必须在内部调用 exit() 系统调用,所以我期望输出只是
Parent
Child
有人能解释一下为什么吗?不停止并连续打印无限循环。
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.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您应该阅读
vfork 的手册页
非常仔细:(以上来自手册页的 POSIX 部分,因此(可能)适用于 Linux 以外的其他环境)。
您正在调用
printf
并从子级返回,因此程序的行为未定义。You should read the man page for
vfork
very carefully:(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.