N 回の反復 (N は 3000 より大きい) のシェル スクリプトを実行する単純な C コードを作成しようとしています。最初は、コードは完全にうまく機能しているように見えますが、反復回数が増えるにつれて、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;
}
シェル スクリプトの出力は、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