我想测试在32位操作系统上是否可以通过乘法进程使用超过4GB的内存(我的:具有1GB内存的Ubuntu)。
因此,我编写了一个小程序,该程序的malloc小于1GB,并对该数组进行了一些操作,并运行了该程序的5个实例。
事实是,我怀疑OS杀死了其中的4个,只有一个幸存下来并显示为“ PID:我完成了”。
(我已经尝试过使用小型阵列并进行5次打印,而且当我使用TOP查看正在运行的进程时,我只看到一个实例。)
奇怪的是-我在所有实例中都收到了返回代码0(成功?),包括那些据称被OS杀死的实例
我没有得到任何按摩说明进程被杀死了。
在这种情况下,此返回码正常吗?
(如果是这样,则会降低我对“返回码”的信任…)
谢谢。
编辑:一些答案表明小程序可能存在错误,所以就在这里。派生并保存返回代码的较大程序较大,在这里将其上载时遇到了麻烦,但我认为(并希望)很好。
我还注意到,如果不是使用分叉程序运行它,而是使用’./a.out&./a.out&./a.out&./a.out&’(当./a.out是附带的小程序的二进制文件),我确实看到了一些“杀手”消息。
#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); }
的方法返回状态(如通过返回wait,waitpid并system)含有更多或更少的情况如下:
wait
waitpid
system
如果您的进程被OOM杀手杀死(显然会向您发送SIGKILL信号),则退出代码完全没有意义。
有关更多信息,请参见等待命令的手册页。