gpt4 book ai didi

c++ - 计算Linux中父进程的最大数量

转载 作者:太空宇宙 更新时间:2023-11-04 05:17:30 25 4
gpt4 key购买 nike

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/resource.h>
#include <errno.h>
int main()
{
int pid;
int temp = 0;
while(1){
pid = fork();
if(pid == 0)
return 0;
if(pid == -1){
if (errno == EAGAIN)
printf("%d \n limit process", (int)temp);
exit(-1);}
temp++;
}
return 0;
}

这是我的代码。但老师说这是不正确的,if (pid == 0) 条件体有问题。请帮帮我。谢谢!

最佳答案

fork() 对于子进程返回 0,对于父进程返回 >0,如果出现错误则返回负值。

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

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

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);
}
}
}

引用资料:

http://man7.org/linux/man-pages/man2/kill.2.html

http://man7.org/linux/man-pages/man2/waitpid.2.html

http://man7.org/linux/man-pages/man2/signal.2.html

关于c++ - 计算Linux中父进程的最大数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47003174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com