C Fork系统调用

C Fork系统调用,c,fork,C,Fork,我尝试在c中执行以下代码: #include <stdio.h> #include <string.h> #include <sys/types.h> int main() { int pid; pid = fork (); printf ("%d \n", pid()); } var pid应该存储进程id的值,对吗 那么下面哪一个是父母,哪一个是孩子的id?! 更具体地说,我想知道fork()系统的返回值调用了什么?!为什么在这

我尝试在c中执行以下代码:

#include <stdio.h>
#include  <string.h>
#include  <sys/types.h>
int main()
{
int pid;
pid = fork ();
printf ("%d \n", pid());
           }
var pid应该存储进程id的值,对吗

那么下面哪一个是父母,哪一个是孩子的id?! 更具体地说,我想知道fork()系统的返回值调用了什么?!为什么在这些过程中它是0

还有一个问题,这个输出总是一样的吗?!或者有时它会倒转吗

亲切的问候

返回值

成功完成后,fork()应将0返回给子级 进程,并将子进程的进程ID返回给 父进程。这两个过程应继续从 fork()函数。否则,-1应返回给母公司 进程,不应创建子进程,并且应将errno设置为 指出错误

这里可能有一个更具说明性的例子:

#include <stdio.h>
#include  <unistd.h>
#include  <sys/types.h>
int main()
{
    pid_t pid;
    pid = fork ();
    printf ("returned=%ld from %ld\n", (long)pid, (long)getpid());
}
请注意,
fork()
返回:

实施应支持一个或多个编程环境 其中blksize\u t、pid\u t、size\u t、ssize\u t和 suseconds\u t不大于long类型的宽度

突出显示的部分意味着可以使用stdio通过转换为
long
来打印
pid\u t
,如我的示例所示


未指定是先运行子级还是先运行父级。它们甚至可能同时运行,因此线路可以颠倒,在极少数情况下,安装了信号处理程序,它们被调用,甚至混合在一起(但这种情况很难触发)

阅读友好的手册。0是子对象,因为子对象可以调用getpid来标识自己,但父对象需要其子对象的句柄。您阅读文档了吗?我投票将此问题作为离题题题结束,因为阅读文档“对您有好处!”。顺便说一句,
fork()
返回
pid\t
not
int
。BTW^2,this
,pid()
不会编译。谢谢@PSkocik,所以您要说的是,在我的示例中,数字17601实际上是fork()调用在父进程中返回的子进程id,对吗?!那么输出是:然后是0,它总是以相同的顺序吗?!来吧,如果链接文档链接到“好”文档。由于
fork()
是POSIX,为什么不使用相关文档:@WissamAJackal查看编辑后的答案。@PSkocik非常感谢,伙计!现在清楚了
#include <stdio.h>
#include  <unistd.h>
#include  <sys/types.h>
int main()
{
    pid_t pid;
    pid = fork ();
    printf ("returned=%ld from %ld\n", (long)pid, (long)getpid());
}
returned=22231 from 22229
returned=0 from 22231