关于gcc -O2下的vfork函数不正确问题

我叫城北徐公 2021-03-31 04:32:47


#include <stdio.h>
#include <unistd.h>
int main(void)
{
int x = 0;
int pid = vfork();
if (!pid)
{
printf("子进程输出x:%d\n",x);
x++;
exit(0);
}
else
{
printf("父进程输出x:%d\n",x);
x++;
}
return 0;
}



执行结果
子进程输出x:0
父进程输出x:0
Program ended with exit code: 0


父进程应该输出1的,把gcc优化选项设置成-O0就好了
...全文
136 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
mLee79 2021-04-01
  • 打赏
  • 举报
回复
vfork 之后只能 _exit 或者 execv*, 其他行为都未定义.
  • 打赏
  • 举报
回复
但关键不是vfork后和父进程的内存不是共享的么,为啥我改了以后父进程并没有改

引用 1 楼 mLee79 的回复:
vfork 之后只能 _exit 或者 execv*, 其他行为都未定义.

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧