2

我正在尝试编写一个简单的 C 代码,它执行 N 次迭代的 shell 脚本(其中 N 大于 3000)。最初,代码似乎运行良好,但随着迭代次数的增加,system() 函数开始返回 -1。此外,如果我再次运行整个程序,错误会发生在循环中完全相同的点。

这是我的代码:

int main(void)
{
    char command[] = "bash sampleScript";
    int i, ret, N = 3000;

    for(i=0;i<N;i++){

       /* Open 'sampleScript', make the required modifications and close it */

       while(!system(NULL)){
          printf("Shell is unavailable");
          sleep(2);
       }
       ret = system(command);
       if(ret == -1){
          printf("System failed\n");
          exit(1);
       }
    }
    return 0;
}

shell 脚本的输出不影响 C 代码。当我执行这段代码时,在 i = 2900 左右,system() 开始返回 -1,我完全不知道为什么会这样。我在这里错过了一个明显的观点吗?有人可以帮我吗?

我在 64 位 Ubuntu 上使用 gcc。

更新:

当 system() 返回 -1 时,对应的errno值为 12 - 无法分配内存。

ulimit -a 的输出是

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 47495
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 47495
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
4

1 回答 1

0

我没有得到你的问题,也许你可以printf("system failed when i =%d\n",i);用来获取一些信息

我使用 SUSE 。

ulimit -a 打印:

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7464
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7464
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

这是我的代码(问题是没有错误打印,N 现在是 10000!):

 2 #define N 10000

  3 int main(void)
  4 {
  5     char command[] = "cd";
  6     int i, ret;
  7 
  8     for(i=0;i<N;i++){
  9 
 10        /* Open 'sampleScript', make the required modifications and close it */
 11 
 12        while(!system(NULL)){
 13           printf("Shell is unavailable");
 14          // sleep(2);
 15        }
 16        ret = system(command);
 17        if(ret == -1){
 18           printf("System failed\n");
 19           exit(1);
 20        }
 21     }
 22     return 0;
 23 }
于 2013-07-27T16:51:34.290 回答