加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – fork()如何工作?

发布时间:2020-12-16 09:14:05 所属栏目:百科 来源:网络整理
导读:我真的很想分叉,这个代码中的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; pid = fork(); if (pid == 0) { for (i
我真的很想分叉,这个代码中的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提供).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读