1

我想编写一些具有以下要求的 C 代码:

  1. 重复分叉执行。
  2. 分叉的进程应该使用大量内存,然后要么放弃它,要么干脆死掉,或者我干脆杀了它。

有任何想法吗?

4

1 回答 1

1
int main (int argc, char *argv[]) {
    unsigned long long bytes;
    char bytes_str[32];
    void *buf;
    int i;
    if (argc < 2) {
        fprintf(stderr, "usage: %s [megabytes]\n", argv[0]);
        exit(EXIT_SUCCESS);
    } else if (argc < 3) {
        switch (fork()) {
        case 0:  break;
        case -1: perror("fork");
                 exit(EXIT_FAILURE);
        default: exit(EXIT_SUCCESS);
        }
        bytes = strtoull(argv[1], 0, 0) * 1024 * 1024;
        snprintf(bytes_str, sizeof(bytes_str), "%llu", bytes);
        if (execlp(argv[0], argv[0], "child", bytes_str, (char *)0) != 0) {
            perror("execlp");
            exit(EXIT_FAILURE);
        }
        /* NOT REACHED */
    } else {
        bytes = strtoull(argv[2], 0, 0);
    }
    if (bytes < 1024*1024) exit(EXIT_SUCCESS);
    buf = malloc(bytes);
    if (buf == 0) {
        perror("malloc");
        exit(EXIT_FAILURE);
    }
    memset(buf, '\xff', bytes);
    free(buf);
    bytes /= 2;
    snprintf(bytes_str, sizeof(bytes_str), "%llu", bytes);
    for (i = 0; i < 2; ++i) {
        switch (fork()) {
        case 0:  break;
        case -1: perror("fork");
                 exit(EXIT_FAILURE);
        default: continue;
        }
        if (execlp(argv[0], argv[0], "child", bytes_str, (char *)0) != 0) {
            perror("execlp");
            exit(EXIT_FAILURE);
        }
        /* NOT REACHED */
    }
    return 0;
}
于 2012-07-25T02:53:09.393 回答