我正在编写一个使用fork命令并循环10次的C程序,同时,每个循环中都会显示进程ID。
以下是我的代码:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
main ()
{ int x;
for(x=0;x<10;x++)
{
fork();
printf("The process ID (PID): %d \n",getpid());
}
}
我的代码生成了大量的进程ID,程序中有什么问题吗?
答案 0 :(得分:5)
fork()
系统调用会创建一个子节点,该子节点执行与父节点相同的代码。从那一刻起,有两个进程执行下一行:父和子。他们每个人都执行printf()
。
第二次执行for
循环时,它由父和子执行:每个循环都执行fork()
,所以从那一刻开始4个过程:第一个过程和他们的新孩子。
因此,对于循环中的每次迭代,您都会将进程数量增加一倍。因此,进程总数为2 ^ 10 = 1024。
因此,执行printf()
循环中的for
:
总计:10 * 2 + 9 * 2 + 8 * 4 + 7 * 8 + 6 * 16 + 5 * 32 + 4 * 64 + 3 * 128 + 2 * 256 + 1 * 512 = 2046。
printf()
执行了2046次。
答案 1 :(得分:0)
检查我的例子
pid_t pID = fork();
if (pID == 0) // child
{
// Code only executed by child process
sIdentifier = "Child Process: ";
globalVariable++;
iStackVariable++;
}
else if (pID < 0) // failed to fork
{
cerr << "Failed to fork" << endl;
exit(1);
// Throw exception
}
else // parent
{
// Code only executed by parent process
sIdentifier = "Parent Process:";
}
// Code executed by both parent and child.