fork和getpid的返回值

最近把之前学的忘了一点,这两个函数的返回值没分清。探究了一下,把收获在这里总结分享一下。

fork

如果我们把程序一行一行地运行过程比作一个人在走路的话,那么没有fork的程序是一个人独自前行。

(我不想听故事、看精美插图了!我要直接看结论)

当这个人遇见了fork()的时候,ta当前的时空就会被复制一份,成为一个当下的平行时空,一起向未来发展(这里的时空,只由两部分组成:那个人和ta脚下的路)。

地球分裂图

如果说平行时空的存在令人震撼,那么创造平行时空的人就是更强大的存在了。(以下用“宇宙”代替“时空”。)

上帝_手_月球图

为了操纵已有的和新创造出的宇宙,在每次复制宇宙时,都为它们标上记号——“旧宇宙”与“新宇宙”。

fork,这个用来复制时空的操作,用它的返回值告诉我们,谁是“新宇宙”(返回值为0),谁是“旧宇宙”(返回一个大于0的值,具体含义稍后说。NO🙅‍,我要直接看具体含义

getpid

有时,在一次路途中,需要许多次宇宙的复制,仅仅用“新旧”两种记号显然不够。我们需要一种能容纳更多不同种宇宙的记号制度。正整数就很合适,从0开始乃至6160117都可以,绝对够用。
在这里插入图片描述

所以宇宙的创造者和管理者们,就用类似的序号来区分它们。

getpid(Get Process ID)返回的就是这个序号——进程id,它是和系统所有进程放在一起编的号。

回溯:fork返回值含义

之前说fork返回0代表“新宇宙”(子进程),返回的代表“旧宇宙”(父进程)的那个大于0的值,就是对应子进程的进程id。


总结

.子进程父进程
fork返回值0对应子进程的进程id
getpid返回值进程id进程id

代码示范

int i;
for (i = 0; i < 3; ++i) {
    int a = fork();
    if (a == 0) {  // 子进程
        printf("[第%d次循环]子进程: fork=%d\t pid=%d\t ppid=%d\n", i, a,
                getpid(), getppid());
    } else {     // 父进程
        wait();  // 等待对应子进程结束
        printf("[第%d次循环]父进程: fork=%d\t pid=%d\t ppid=%d\n", i, a,
                getpid(), getppid());
        exit(0);
    }
}

运行结果
运行结果



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值