相关疑难解决方法(0)

操作系统终止您的进程时返回代码

我想测试一下,如果使用多重进程,我可以在32位操作系统上使用超过4GB的内存(我的:Ubuntu,1GB内存).

所以我编写了一个小程序,mallocs略小于1GB,并对该阵列执行一些操作,并运行该程序的5个实例查询分叉.

问题是,我怀疑操作系统杀死了其中的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);
}
Run Code Online (Sandbox Code Playgroud)

linux memory-management kill process return-value

2
推荐指数
2
解决办法
1万
查看次数

标签 统计

kill ×1

linux ×1

memory-management ×1

process ×1

return-value ×1