微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

fork如何返回两个值?

由于C中的函数只返回一个值,所以fork() (也是一个函数fork()如何返回两个值?

我在哪里可以保存我的Haskell“模块”?

一个根本不被调用函数中分割错误

bash shell脚本函数定义中使用的括号“f(){}”是什么? 与使用“function”关键字不同吗?

c – 中断正在线程中执行的函数调用

如何使用32位机器在PHP中打印40位数字

如果您阅读,编译和运行以下程序,您应该对发生的事情有更好的了解。

#include <stdio.h> #include <unistd.h> int main(void) { pid_t fk; printf("tbefore fork my pid = %lun",(unsigned long)getpid() ); fflush(stdout); /* This may keep the above print statement from outputing twice. */ fk = fork(); /* The OS kernel makes a copy of the current process here */ printf("fork returned %lu and Now my pid = %lun",(unsigned long)fk,(unsigned long)getpid() ); return 0; }

需要fflush(stdout)的原因是由于fork是复制进程的,所以stdio的stdout所做的缓冲也是重复的。 在第一个打印语句结尾处的“ n”可能会使其继续并刷新标准输出,但不能保证。

fork函数返回0到已创建的子进程,并将子进程ID返回给父进程。

两个独立的进程都返回一个单一的值。

所以把它看作是一个回报被称为每个 线 处理。

Gnostus所说,fork()函数不返回两个值。

它所做的是返回一个单一的值,所有的功能,但它会返回两次。

一旦进入父进程,一旦进入子进程。 父进程获取孩子的进程ID返回给它,孩子得到0 – 一个无效的进程ID,所以代码可以告诉它是孩子。

孩子是一个新的过程,运行相同的代码,并在代码中与产生它的父代码在相同的地方。

int cProcessID; cProcessID = fork(); if (cProcessID == 0) { // Child process } else { // Parent process }

这里的关键洞察是考虑一个事实,在fork()你真的有两个程序副本。 这些是两个进程,运行相同的代码副本,执行指针正好在同一行代码,即fork() ,准备返回。

操作系统安排fork()返回父进程中的子进程的pid,并且在子进程中返回零(如果事情顺利的话)。

这就是为什么他们说fork()返回两次。 一旦进入每个过程。

fork不返回两个值。 在fork系统调用之后,你只需要有两个独立的进程执行相同的代码,并且从fork返回的pid是区分父进程或子进程的唯一方法

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐