我想測試是否使用乘法進程我可以在32位O.S上使用超過4GB的RAM(我的Ubuntu:1GB RAM)。當操作系統殺死你的進程時返回代碼
所以我寫了一個小程序malloc稍小於1GB,並對該數組做一些操作,並運行該程序的5個實例vie叉。
事情是,我懷疑O.S殺死了其中4人,只有一人倖存並顯示它是「PID:我完成了」)。
(我有小陣試了一下,有5印刷,還當我看與TOP正在運行的進程,我看到的只有一個實例。)
奇怪的是這個 - 我在所有的實例中收到了返回代碼0(成功?),包括據稱被操作系統殺死的代碼
我沒有得到任何按摩說明進程被殺害。
這種情況的返回碼是否正常?
(如果是這樣,它減少了在 '返回代碼' ......我的事)
感謝。
編輯:一些答案在小程序中提出了可能的錯誤,所以在這裏。分支和保存返回代碼的較大程序比較大,而且我在這裏無法上傳,但我認爲(並且希望)它沒有問題。
而且我注意到,如果不是我的分岔程序運行它,我用終端運行」 ./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);
}
......希望我能給予好評的意見:) – 2009-04-12 21:40:33