代码:
int main(void) { printf("pid: %dn",getpid()); pid = fork(); if (pid < 0) { fprintf(stderr,"Fork Failed!"); exit(-1); } else if (pid == 0) { execv("sum",argv); } else { printf(" pid: %dn",pid); wait(NULL); } }
输出:
pid: 280 pid: 281
问题是:
为什么这两个PID不同。 我以为他们应该是相同的,因为父母是什么在执行else块和父母是什么在叉前执行,所以他们应该是相同的,不是?
如何循环通过标准input和pipe道输出到C儿童execl命令?
Linux叉子的目的?
Linux叉:pid重用
spawn和fork有什么区别?
如何产生不会与父母一起死亡的儿童stream程?
vfork永远不会返回
在Ruby中用双叉创build一个守护进程
如何写入pipe叉?
分叉系统调用的应用程序
在Linux中fork()的名字是什么意思?
返回值
成功时,子进程的PID将在父进程中返回,
并且在小孩中返回0。 失败时,-1在父项中返回,
没有创建子进程,并且适当地设置了errno。
所以,在父进程中,fork()返回创建的子进程的PID。
我不会重复nos的回答 ,因为他完全正确。 但是我会指出,任何程序都可以通过getpid系统调用来检索自己的PID。 所以叉子没有理由返回你自己的 PID。 相反,您可能想知道刚分叉过程的PID,如果它没有通过fork返回(父),可能很难获得。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。