C プログラムを OpenVMS から Linux に移行する必要があり、サブプロセスを生成するプログラムで問題が発生しています。サブプロセスが生成されます (fork は正常に動作します) が、execve は失敗します (間違ったプログラム名が指定されているため、これは正しいことです)。
しかし、アクティブなサブプロセスの数をリセットするために、後で wait() を呼び出しますが、戻りません。ps 経由でプロセスを見ると、これ以上サブプロセスがないことがわかりますが、wait() は思ったように ECHILD を返しません。
while (jobs_to_be_done)
{
if (running_process_cnt < max_process_cnt)
{
if ((pid = vfork()) == 0)
{
params[0] = param1 ;
params[1] = NULL ;
if ((cstatus = execv(command, params)) == -1)
{
perror("Child - Exec failed") ; // this happens
exit(EXIT_FAILURE) ;
}
}
else if (pid < 0)
{
printf("\nMain - Child process failed") ;
}
else
{
running_process_cnt++ ;
}
}
else // no more free process slot, wait
{
if ((pid = wait(&cstatus)) == -1) // does not return from this statement
{
if (errno != ECHILD)
{
perror("Main: Wait failed") ;
}
anz_sub = 0 ;
}
else
{
...
}
}
}
サブプロセスがもうないことを待機コマンドに伝えるために何かしなければならないことはありますか? OpenVMS では、プログラムは正常に動作します。
ご協力ありがとうございました