我想测试我是否能够在 32 位操作系统(我的:Ubuntu 和 1GB 内存)上使用超过 4GB 的内存。
所以我编写了一个小程序,它 malloc 的内存略少于 1GB,并对那个数组执行了一些操作,并运行了这个程序的 5 个实例 vie forks。
问题是,我怀疑 O.S 杀死了其中的 4 个,只有一个幸存下来并显示它是“PID:我已经完成了”)。
(我用小数组试过,打印了 5 次,当我用 TOP 查看正在运行的进程时,我也只看到一个实例..)
奇怪的是 - 我在所有实例中都收到了返回码 0(成功?),包括据称被操作系统杀死的实例。
我没有收到任何说明进程已被终止的信息。
对于这种情况,此返回码是否正常?
(如果是这样,它会降低我对“返回代码”的信任...)
谢谢。
编辑:一些答案表明小程序中可能存在错误,所以在这里。 fork 和保存返回码的较大程序较大,我无法在此处上传它,但我认为(并希望)它很好。
我还注意到,如果我不使用我的 fork 程序运行它,而是使用终端运行它 './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);
}
最佳答案
好吧,如果您的进程无法malloc()
1GB 内存,操作系统将不会终止该进程。所发生的只是 malloc()
返回 NULL。因此,根据您编写代码的方式,该进程可能无论如何都会返回 0 - 如果您希望它在内存分配失败时返回错误代码(这通常是一种好的做法),您必须将该行为编程为
关于linux - 当操作系统终止您的进程时返回代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/742413/