Tre*_*vTS 3 c operating-system fork pid process
我有这段代码,它的目标是创建N个子进程并打印出每个PID和进程号。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void childProcess(int num)
{
pid_t pid = fork();
printf("Hello! I am process no. %d! my PID is %d!\n", num, pid);
}
int main()
{
int i = 0;
for(i = 1; i <= 5; i++)
{
childProcess(i);
_exit(3);
}
exit(0);
}
Run Code Online (Sandbox Code Playgroud)
然而之后尝试多种方式:如exitVS _exi在T,递归childProcess,pid = wait(),我仍然无法顺利建立仅5进程。到目前为止,使用此代码,我的输出是:
Hello! I am process no. 1! my PID is 96196!
Hello! I am process no. 1! my PID is 0!
Run Code Online (Sandbox Code Playgroud)
我不确定如何正确退出子进程。没有出口,代码将创建N!流程。
您正确地退出了子进程,只是您在错误的时间执行了它。在fork()之后,每个子进程保持与父进程相同的循环运行,创建另一个子进程,这就是为什么您最终拥有很多子进程的原因。
正确的代码如下所示:
for (int i = 0; i < 5; i++) {
if (fork() == 0) {
// child process
printf("I'm child %d, my pid is %d\n", i, getpid());
exit(0);
}
// parent process keeps running the loop
}
Run Code Online (Sandbox Code Playgroud)
fork()将您的进程分为两个进程:父进程和子进程。您需要对其内部的返回值进行某种测试,childProcess()以确定您是在父级还是子级中。如果pid是 0 那么你是孩子;如果非零那么你在父级中。基于此,您将需要有条件地退出该程序。