乗算プロセスを使用して、32ビットOSで4GBを超えるRAMを使用できるかどうかをテストしたかった(私の場合:1GB RAMのUbuntu)。
そのため、1GB よりわずかに小さいサイズを malloc する小さなプログラムを作成し、その配列に対して何らかのアクションを実行し、このプログラムの 5 つのインスタンスを fork で実行しました。
問題は、OSがそれらのうち4つを殺し、1つだけが生き残り、「PID:終了しました」と表示したと思われることです)。
(小さな配列で試してみたところ、5つの印刷がありました.TOPで実行中のプロセスを見ると、インスタンスが1つしか表示されません..)
奇妙なことはこれです-OSによって殺されたとされるものを含む、すべてのインスタンスでリターンコード0(成功?)を受け取りました
プロセスが強制終了されたことを示すメッセージは表示されませんでした。
この戻りコードは、この状況では正常ですか?
(そうであれば、「リターンコード」に対する私の信頼が低下します...)
ありがとう。
編集:いくつかの回答は、小さなプログラムで発生する可能性のあるエラーを示唆していたので、ここにあります。リターン コードをフォークして保存するより大きなプログラムはより大きく、ここにアップロードするのは難しいですが、問題ないと思います (そして希望します)。
また、fork プログラムで実行する代わりに、'./a.out & ./a.out & ./a.out & ./a.out &' を使用して端末で実行すると ( ./a.out は、添付された小さなプログラムのバイナリです) 'Killed' メッセージがいくつか表示されます。
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#define SMALL_SIZE 10000
#define BIG_SIZE 1000000000
#define SIZE BIG_SIZE
#define REAPETS 1
int
main()
{
pid_t my_pid = getpid();
char * x = malloc(SIZE*sizeof(char));
if (x == NULL)
{
printf("Malloc failed!");
return(EXIT_FAILURE);
}
int x2=0;
for(x2=0;x2<REAPETS;++x2)
{
int y;
for(y=0;y<SIZE;++y)
x[y] = (y+my_pid)%256;
}
printf("%d: I'm over.\n",my_pid);
return(EXIT_SUCCESS);
}