最近找到了一个非常值得探究的代码。
如下:
#include"apue.h"
static void f1(),f2();
int main()
{
f1();
f2();
write(STDOUT_FILENO,"hello/n",7);
sleep(2);
_exit(0);
}
static void f1()
{
pid_t pid;
if((pid=vfork())<0) err_sys("vfork error");
}
static void f2()
{
char buf[1000];
int i;
for(i=0;i
buf[i]=0;
}
这个代码编译好执行好后,会出现段错误,主要原因是vfork.
关于vfork,主要区别于fork的是,vfork可以不用复制原先的父进程,而是通过直接使用父进程的栈空间,然后加上锁,之后再把f1的客空间给覆盖了,所以导致段错误。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29454248/viewspace-1079018/
,如需转载,请注明出处,否则将追究法律责任。