程序是否使用 fork 和 processes 计算一切正确?
Is program count everything right with fork and processes?
我只需要知道我是否正确。在将要进行一次的循环中的切换之前使用这个 forks(),进程数应该是 5,对吗?如果我要添加更多 forks(),这个数字会增加到 9,17 等等?在这种情况下,我是 courius,这个进程是如何创建新进程的,下一个 forks() 是否只从子进程或父进程创建新进程,因为我无法正确绘制它,因为我不知道如何检查创建新进程的进程那些。
也许这是一个显而易见的问题,但我想我错过了一些东西,我想确保我理解得很好。
谢谢!
Is it gonna look like this? (i made a draw)
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
void processTree()
{
pid_t pid_t = getpid();
int tmp = pid_t;
printf("PID : %d\n",pid_t);
char buffer [128];
for(int i = 0; i < 1; i++)
{
int pid_child;
fork();
fork(); //if i am gonna add more fork there will be 9,17,etc processes?
switch(pid_child = fork())
{
case -1:
exit(-1);
case 0:
pid_t = pid_child;
printf("UID: %d, GID: %d, PID: %d, PPID: %d\n", getuid(), getgid(), getpid(), getppid()); fflush(stdout);
break;
}
}
int main()
{
processTree();
return 0;
}
for
循环迭代一次,所以它是无关紧要的。该节目从一个进程开始,该进程正在执行 main()
,它执行
fork();
现在有两个进程。两个进程中的每一个都做一个
fork();
现在有四个进程。这四个进程中的每一个都做一个
switch(pid_child = fork())
现在有八个进程。
显示的程序之前没有做任何其他事情,或者之后没有做任何事情 fork()
是 material,相对于最后的进程总数。
总计:八个进程。
我只需要知道我是否正确。在将要进行一次的循环中的切换之前使用这个 forks(),进程数应该是 5,对吗?如果我要添加更多 forks(),这个数字会增加到 9,17 等等?在这种情况下,我是 courius,这个进程是如何创建新进程的,下一个 forks() 是否只从子进程或父进程创建新进程,因为我无法正确绘制它,因为我不知道如何检查创建新进程的进程那些。 也许这是一个显而易见的问题,但我想我错过了一些东西,我想确保我理解得很好。
谢谢!
Is it gonna look like this? (i made a draw)
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
void processTree()
{
pid_t pid_t = getpid();
int tmp = pid_t;
printf("PID : %d\n",pid_t);
char buffer [128];
for(int i = 0; i < 1; i++)
{
int pid_child;
fork();
fork(); //if i am gonna add more fork there will be 9,17,etc processes?
switch(pid_child = fork())
{
case -1:
exit(-1);
case 0:
pid_t = pid_child;
printf("UID: %d, GID: %d, PID: %d, PPID: %d\n", getuid(), getgid(), getpid(), getppid()); fflush(stdout);
break;
}
}
int main()
{
processTree();
return 0;
}
for
循环迭代一次,所以它是无关紧要的。该节目从一个进程开始,该进程正在执行 main()
,它执行
fork();
现在有两个进程。两个进程中的每一个都做一个
fork();
现在有四个进程。这四个进程中的每一个都做一个
switch(pid_child = fork())
现在有八个进程。
显示的程序之前没有做任何其他事情,或者之后没有做任何事情 fork()
是 material,相对于最后的进程总数。
总计:八个进程。