C++ 计算Linux中父进程的最大数量 #包括 #包括 #包括 #包括 #包括 #包括 int main() { int-pid; 内部温度=0; 而(1){ pid=fork(); 如果(pid==0) 返回0; 如果(pid==-1){ if(errno==EAGAIN) printf(“%d\n限制进程”,(int)temp); 退出(-1);} temp++; } 返回0; }

C++ 计算Linux中父进程的最大数量 #包括 #包括 #包括 #包括 #包括 #包括 int main() { int-pid; 内部温度=0; 而(1){ pid=fork(); 如果(pid==0) 返回0; 如果(pid==-1){ if(errno==EAGAIN) printf(“%d\n限制进程”,(int)temp); 退出(-1);} temp++; } 返回0; },c++,linux,C++,Linux,这是我的密码。但老师说这是不正确的,在if(pid==0)条件体中有些地方是错误的。请帮帮我。谢谢大家! fork()返回子进程的0,返回父进程的>0,如果有错误则返回负值 您的子进程立即完成,因此实际上您永远不会同时生成多个进程,因为它们是分叉并完成的 您要做的是保持子进程运行,直到父进程告诉它关闭(例如通过信号) 在父进程中,您需要在测试完成时关闭所有子进程。例如,您可以将所有子进程放入一个进程组,并向其发送信号: if (0 == pid) { // I am child proc

这是我的密码。但老师说这是不正确的,在if(pid==0)条件体中有些地方是错误的。请帮帮我。谢谢大家!

fork()
返回子进程的
0
,返回父进程的
>0
,如果有错误则返回负值

您的子进程立即完成,因此实际上您永远不会同时生成多个进程,因为它们是分叉并完成的

您要做的是保持子进程运行,直到父进程告诉它关闭(例如通过信号)

在父进程中,您需要在测试完成时关闭所有子进程。例如,您可以将所有子进程放入一个进程组,并向其发送信号:

if (0 == pid) {
    // I am child process -> wait until signal
    // for example: sleep(MAX_INT);
}
if(pid==-1){
if(errno==EAGAIN){
//打印输出
printf(“%d\n限制进程”,temp);
//杀死所有子进程(您可以
kill(0,SIG_TERM);//您可能还需要在父进程中设置信号处理程序-请参阅“信号”)
//等待子进程完成并清理(我们知道有“temp”计数);
对于(int=0;i
参考文献:


您可能缺少标记适当块的
{}
。我应该如何实现它?我应该使用什么命令?对不起,我对这些信号和过程一无所知:(
if (0 == pid) {
    // I am child process -> wait until signal
    // for example: sleep(MAX_INT);
}
  if (pid == -1) {
    if (errno == EAGAIN) {
      // print output
      printf("%d \n limit process", temp);
      // kill all child processes (you 
      kill(0, SIG_TERM); // you might need to set up signal handler in parent process too - see 'signal')
      // wait for child processes to finish and cleanup (we know there is 'temp' count of them);
      for (int = 0; i < temp; ++i) {
        wait(NULL);
      }
    }
  }