Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 退出和返回之间的差异_C_Fork_Exit - Fatal编程技术网

C 退出和返回之间的差异

C 退出和返回之间的差异,c,fork,exit,C,Fork,Exit,考虑下面的代码 int glob = 6; /* external variable in initialized data */ int main(void) { int var; /* automatic variable on the stack */ pid_t pid; var = 88; printf("before vfork\n");

考虑下面的代码

    int     glob = 6;       /* external variable in initialized data */

    int
    main(void)
    {
        int     var;        /* automatic variable on the stack */
        pid_t   pid;

        var = 88;
        printf("before vfork\n");   /* we don't flush stdio */

        if ( (pid = vfork()) < 0)
            err_sys("vfork error");
        else if (pid == 0) {        /* child */
            glob++;                 /* modify parent's variables */
            var++;
            _exit(0);               /* child terminates */
        }

        /* parent */
        printf("pid = %d, glob = %d, var = %d\n", getpid(), glob, var);
        exit(0);
    }
int glob=6;/*初始化数据中的外部变量*/
int
主(空)
{
int var;/*堆栈上的自动变量*/
pid_t pid;
var=88;
printf(“在vfork\n之前”);/*我们不刷新stdio*/
如果((pid=vfork())<0)
系统错误(“工作错误”);
如果(pid==0){/*child*/
glob++;/*修改父变量*/
var++;
_退出(0);/*子级终止*/
}
/*母公司*/
printf(“pid=%d,glob=%d,var=%d\n”,getpid(),glob,var);
出口(0);
}
这是一个解释如何使用vfork系统调用的示例。
如果不使用_exit,而是使用return,则会得到不同的输出值。返回不等于调用_exit吗?为什么不呢?

“除了如果由
vWork()
创建的进程修改了除用于存储
vWork()
返回值的
pid\t
类型的变量以外的任何数据,则行为是未定义的。”“子进程不能从当前函数返回或调用
exit(3)
,但可以调用
\u exit(2)
“不,
return
不等同于
\u exit()
,有点等同于
exit()
。已经讨论过了!好啊这也是错误的,因为这两个进程共享堆栈?