0

次のコードを検討してください

    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);
    }

これは、vfork syscall の使用方法を説明する例です。_exit を使用する代わりに return を使用すると、異なる出力値が得られます。return は call _exit と同等ではありませんか? なぜだめですか?

4

0 に答える 0