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

U はプロセスを「開く」ことができません。それらを作成できます。

_CHILD_MAXは、最大数の値を含む定数です。作成できる子プロセスの。unistd.hヘッダーで定義されています。照会するには、sysconf関数を使用します。CHILD_MAX 引数をSC接頭辞sysconf付きで渡します。

#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 に答える