void main () { if ( fork () ) { printf ( "PID1 %dn", getpid () ); } else { printf ( "PID2 %dn", 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语句的第二部分。
以上就是c/c++开发分享c – fork()代码相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/545326.html