不同数量的最大参数和不同的失败结果

时间:2014-04-07 03:04:09

标签: c linux 64-bit

Linux x64上可执行文件的最大参数数是多少?

我已经审核过:

编辑: 根据fs / exec.c 210-216:

/*
     * Limit to 1/4-th the stack size for the argv+env strings.
     * This ensures that:
     *  - the remaining binfmt code will not run out of stack space,
     *  - the program will have a reasonable amount of stack left
     *    to work from.
 */

堆栈的软限制为8MB,并且根据ulimit和getrlimit()没有硬限制。

对于常量环境变量和同类参数(所有" 1 \ 0"),我可以运行程序的参数数量各不相同。程序无法运行时,我得到两种不同的行为:

  1. Segfualt
  2. 字符串" Killed"打印到控制台
  3. 我可以运行程序的最大参数数量在上次运行后上升到最大值。连续多次运行程序,如果我没有超过该最大值,将最终导致成功。

    在一个838325参数的情况下,前两次运行导致SEGFAULTS,第三次运行成功,ARGV + ENV采用8384282字节包括数据和指向数据的指针。 5MB短的完整堆栈,不包括堆栈帧,我不知道如何在这里计算。使用更多参数(例如1000000)运行编程会导致" Killed"。在一定程度上,我用少量的论据来接受" Killed"结果

    1. 为什么我会得到段错误?
    2. 为什么我有时能够使用多个参数运行程序而不是其他参数?
    3. 为什么我会扼杀死亡的结果?
    4. 如果堆栈没有硬限制,为什么我不能将堆栈增加到大约8MB?
    5. 编辑:语法 EDIT2:完全改写

0 个答案:

没有答案