由于C中的函数只返回一个值,所以fork() (也是一个函数fork()如何返回两个值?
我在哪里可以保存我的Haskell“模块”?
bash shell脚本函数定义中使用的括号“f(){}”是什么? 与使用“function”关键字不同吗?
如何使用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] 举报,一经查实,本站将立刻删除。