0

我是 C 语言的初学者。我有这个想法来编写一个程序,该程序将找到我可以打开的最大进程数。

我拿出这段代码:

int main() {

while (1){
    pid_t pid = fork();
    if(pid) {
        if ( pid == -1){
            fprintf(stderr,"Can't fork,error %d\n",errno);
            exit(EXIT_FAILURE);
        }else{
            int status;
            alarm(30);
            if(waitpid(pid, &status, 0)==pid) {
                alarm(0);
                // the child process complete within 30 seconds
                printf("Waiting.");
            }else {
                alarm(0);
                // the child process does not complete within 30 seconds
                printf("killed");
                kill(pid, SIGTERM);
            }
        }
    }
    else{
        alarm(30);
        printf("child");
    }
}
}

问题是这个程序导致我的笔记本电脑崩溃..:-|

我假设当程序无法打开更多进程时,我会从 fork() 中得到-1,然后退出程序。好吧,它没有发生。

任何想法?我在这里想念什么?

谢谢!

4

2 回答 2

1

如果您真的想知道可以打开多少个进程,您可以使用 sysconf 调用,查找 _SC_CHILD_MAX 变量。 在这里检查

于 2012-11-30T10:06:51.773 回答
0

你不能“打开”一个进程。您可以创建它们。

_CHILD_MAX是一个包含 max no 值的常量。可以创建的子进程。它在unistd.h头文件中定义。要查询,请使用该sysconf功能。将 CHILD_MAX 参数传递给sysconf带有SC前缀的参数。

#define _POSIX_SOURCE
#define _POSIC_C_SOURCE 199309L
#include<stdio.h>
#include<unistd.h>

int main()
{
     int res;
     if((res==sysconf(_SC_CHILD_MAX))==-1)
        perror("sysconf");
     else
        printf("\nThe max number of processes that can be created is: ", CHILD_MAX);

     return 0;
}
于 2013-06-19T14:48:39.813 回答