gpt4 book ai didi

在 C 循环中调用 system() 失败

转载 作者:太空宇宙 更新时间:2023-11-04 00:07:24 28 4
gpt4 key购买 nike

我正在尝试编写一个简单的 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

最佳答案

我没有得到你的问题,也许你可以使用 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 }

关于在 C 循环中调用 system() 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17899164/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com