这是我的一项任务提出的问题,对此我有些困惑。
int main() { printf("line\n"); pid_t pid = fork(); fork(); fork(); if(pid == 0) fork(); fork(); printf("line\n"); return 0; }
通过执行代码将创建多少个进程?
通过执行代码,它将生成28行输出,只是不确定如何找到在此语句中创建的进程数量。
总共有24个过程。这是方法。
在第一个fork()之后,有两个过程。其中之一pid == 0
;在另一个过程pid != 0
中。
[在第二次分叉之后,有4个过程(其中一半具有pid == 0
)。
[在第三次分叉之后,有8个进程(其中一半有pid == 0
)。
第四个fork语句仅由其中pid == 0
的那些进程执行。因此,将有4个进程执行fork(并变成8个进程)。其他4个进程将不会执行fork,而将保持4个进程。总共我们有8 + 4 = 12个进程。
最后,另一个分支将我们的12个过程变成24个。
通过执行代码将创建多少个线程?
现在是语义问题。您是否说进程不是线程,所以创建了[[0线程?您是否说在24个进程中,第一个是原始进程,不是由该代码创建的,因此总共创建了23个进程?这是一个语义问题,而不是软件问题,因此我们不能为您提供帮助。
打印的行数
第一个printf仅由原始进程执行(因为它尚未分叉)。第二个printf由所有24个进程执行(正好在每个进程终止之前)。因此总共打印了25行。