工序数

时间:2019-01-29 08:42:04

标签: process operating-system fork

我正在准备考试,正在做已经解决的练习。但是我在一个有关流程的问题上遇到了麻烦,因为我认为我做对了,但是答案与我的不符。这是以下问题:

下面是一个名为Agent_Smith.c的程序的代码。包括初始父进程在内,创建了多少个Agent_Smith进程?假设没有错误。

https://imgur.com/NLvbzKn

我知道只有子进程的pid = 0,而其父进程继承其实际的pid(!= 0)。所以我这样做:(假设smith = fork();是fork1等等。)

https://imgur.com/9sHNRP1

在练习中,它说进程 includes 的初始父进程是12,而我的进程是13,我不知道我在哪里做错了。我认为这是解决方案中的错误,但是我不确定,所以我想问一下。我是该网站的新手,如果操作不当,敬请原谅。

2 个答案:

答案 0 :(得分:0)

我还找到12个进程。我不太了解您的绘图,但是如果所有叉子按程序顺序编号为1-6,这就是我的发现。进程按程序顺序进行编号。

P0 is parent
P0 -> fork1 P1  
P1 -> fork2 P2 
   -> fork3 P3
   -> fork4 P4
P2 -> fork3 P5 
   -> fork4 P6
P3 -> fork4 P7
P5 -> fork4 P8
P0 -> fork5 P9
   -> fork6 P10
P9 -> fork6 P11

所以有12个进程P0-P11。

顺便说一句,切勿以图片形式提供代码。有多种方法可以内联格式化。

答案 1 :(得分:0)

让我们用Refused to connect to 'http://localhost:3001/v1/companies/1/items.json' because it violates the following Content Security Policy directive: "connect-src 'self' https: http://localhost:3000 ws://localhost:3000" 来表示父母。

因此,第一个fork()将生成一个新的子代,因此到目前为止,我们将有2个进程。

父项将获得大于0的值。因此它将进入for循环,接下来的2 p0将生成3个新进程。所以到目前为止,我们有1个父级和4个新进程。

现在,第一个子进程将执行else语句。三个fork()将产生总共8个过程,包括第一个孩子和7个新过程。最后,在if条件下生成的3个新进程中,在else条件下生成的7个新进程中,我们将获得1个父级,1个子级。因此共有12个进程。