为什么在程序中间创建一个fork会在程序运行之前更改我的pid变量的值?

时间:2016-05-04 02:13:15

标签: c linux

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>

useconds_t BEAUTY_SLEEP = 500;

int main() {
    int        remains = 0;
    char       whoami[50];
    pid_t      pid;
    pid_t      ppid;

    printf("%d\n", pid); //debug
    printf("%d\n", getppid()); //debug
    fflush(stdout); //debug


    while (1) {

        if ((ppid = getppid()) == 2704 && (pid == 0)) {
            pid = fork();
            if (pid == -1) {
                perror("fork()");
                exit(1);
            }
            printf("%ld\n", (long)ppid);
            puts("beep");
        } else {
            usleep(BEAUTY_SLEEP);
        }
    }

    return 0;
}

当我发表评论&#34; pid = fork()&#34;在上面的while循环中,printf(&#34;%d \ n&#34;,pid)打印正确的默认值0.但是,当我恢复pid = fork()行时,print语句输出一个非零进程ID。关于追溯任务发生的原因的任何线索?

0 个答案:

没有答案