我想测试是否使用乘法进程我能够在32位O.S上使用超过4GB的ram(我的:Ubuntu,1GB内存).
所以我编写了一个小程序,mallocs略低于1GB,并对该阵列执行一些操作,并运行该程序的5个实例查询分叉.
问题是,我怀疑O.S杀死了其中的4个,只有一个幸存并显示出它是“PID:我已经完成了”).
(我用小阵列尝试了它并获得了5次打印,当我用TOP查看正在运行的进程时,我只看到一个实例..)
奇怪的是这个 – 我收到了所有实例中的返回码0(成功?),包括那些据称被O.S.杀死的实例.
我没有得到任何按摩说明过程被杀死了.
这种情况的返回码是否正常?
(如果是这样,它会降低我对’返回代码’的信任……)
谢谢.
编辑:一些答案表明小程序中可能存在错误,所以在这里.分叉和保存返回代码的较大程序较大,我在这里上传时遇到问题,但我认为(希望)没关系.
另外我注意到,如果不使用我的分叉程序运行它,我使用’./a.out&和终端运行它. ./a.out& ./a.out& ./a.out>’ (当./a.out是附加的小程序的二进制文件时)
我确实看到了一些“被杀”的消息.
#include
#include
#include
#include
#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
{
int y;
for(y=0;y
x[y] = (y+my_pid)%256;
}
printf("%d: I'm over.\n",my_pid);
return(EXIT_SUCCESS);
}