c – fork()代码

void main () { if ( fork () ) { printf ( "PID1 %d\n", getpid () ); } else { printf ( "PID2 %d\n", getpid () ); } } 

这段代码有什么作用? 我知道它与进程ID有关,但不应该将某些东西返回到条件中以确定它是否是子进程/父进程?

通常它是:

 pid_t pid = fork(); if(pid == 0) { //child } else if(pid > 0) { //parent } else { //error } 

手册页说:

 返回值
   成功完成后,fork()将返回0给孩子 
   进程并将子进程的进程ID返回给 
   父进程。 两个进程都将继续执行 
    fork()函数。 
   否则,-1将返回到父进程,没有子进程 
   应创建,并设置errno以指示错误。

上面的代码在执行fork调用时会创建一个新进程,这个进程将是原始进程的几乎完全相同的副本。 这两个过程将继续在返回表格中继续执行,叉号会引出一个问题“我怎么知道我是新流程还是旧流程?” 因为它们几乎相同。 为此,fork设计器使fork调用在每个进程中返回不同的东西,在新进程(子进程)中,fork调用返回0并且原始进程(父进程)fork返回新进程的ID,以便父进程可以与之互动。

所以在代码中,fork调用创建了一个子进程,两个进程都是seforatly执行if语句。 在父级中,返回值不为零,因此父级执行if语句。 在子节点中,返回值为0,因此它执行else语句。 希望这可以帮助 :-)

fork()的返回值指示进程是父进程还是子进程。 因此,子节点将始终打印“PID2 0”,因为如果fork()返回0,则运行if语句的第二部分。