当前位置 : 主页 > 编程语言 > c++ >

c – fork()如何工作?

来源:互联网 收集:自由互联 发布时间:2021-06-23
我真的很想分叉,这个代码中的pid是做什么的?有人可以解释一下X行和Y行的内容吗? #include sys/types.h#include stdio.h#include unistd.h#define SIZE 5int nums[SIZE] = {0,1,2,3,4};int main(){ int i; pid_t pid; pi
我真的很想分叉,这个代码中的pid是做什么的?有人可以解释一下X行和Y行的内容吗?

#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#define SIZE 5
int nums[SIZE] = {0,1,2,3,4};
int main()
{
    int i;
    pid_t pid;
    pid = fork();
    if (pid == 0) {
        for (i = 0; i < SIZE; i++) {
            nums[i] *= -i;
            printf("CHILD: %d ",nums[i]); /* LINE X */
        }
    }
    else if (pid > 0) {
        wait(NULL);
        for (i = 0; i < SIZE; i++)
            printf("PARENT: %d ",nums[i]); /* LINE Y */
    }
    return 0;
}
fork()复制了进程,因此在调用fork之后,实际上有2个程序实例正在运行.

你怎么知道哪个进程是原始进程(父进程),哪个进程是新进程(父进程)?

在父进程中,从fork()返回子进程的PID(将是一个正整数).这就是if(pid> 0){/ * PARENT * /}代码有效的原因.在子进程中,fork()只返回0.

因此,由于if(pid> 0)检查,父进程和子进程将产生不同的输出,您可以看到here(由注释中的@jxh提供).

网友评论