在测试fork特性的时候,用命令行运行与ide中出现完全不同的效果。单独测试fork函数的时候发现,fork成功,但是它会从main函数开始运行。特此记录!

环境

  • 华为云centos7
  • 编程ide:vscode+remote
  • 编译环境:gcc version 4.8.5 20150623 (Red Hat 4.8.5-44)

代码与结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <unistd.h>  
#include <stdio.h>
int main(void)
{
int i=0;
printf("i son/pa ppid pid fpid\n");
/id指当前进程的父进程pid
//pid指当前进程的pid,
//fpid指fork返回给当前进程的值
for(i=0;i<2;i++){
pid_t fpid=fork();
if(fpid==0)
printf("%d child %4d %4d %4d\n",i,getppid(),getpid(),fpid);
else
printf("%d parent %4d %4d %4d\n",i,getppid(),getpid(),fpid);
}
return 0;
}

vscode结果:

1
2
3
4
5
6
7
8
9
10
11
12
i son/pa ppid pid  fpid
0 parent 26418 26424 26425
1 parent 26418 26424 26426
i son/pa ppid pid fpid
0 child 1 26425 0
1 parent 1 26425 26427
i son/pa ppid pid fpid
0 parent 26418 26424 26425
1 child 1 26426 0
i son/pa ppid pid fpid
0 child 1 26425 0
1 child 1 26427 0

命令行输出结果:

1
2
3
4
5
6
7
i son/pa ppid pid  fpid
0 parent 26622 26671 26672
1 parent 26622 26671 26673
0 child 1 26672 0
1 parent 1 26672 26674
1 child 1 26673 0
1 child 1 26674 0

总结

目前怀疑是否是vscode的remote造成此原因。结果尚未可知,有待后续研究。