forkした後、子プロセスでexeclを使いたいです。execl はスクリプトを実行しますが、これには約 120 秒かかります。異なる引数 (0、WNOHANG など) を使用して、waitpid、wait、および waitid のほとんどすべての組み合わせを試しましたが、すべての場合で戻り値が -1 になります。だから私はいつ使用する必要がある待機関数を知りたいですか? そのため、1 つの待機関数に集中して機能させることができます。
ログから観察したもう 1 つの興味深い点は、子プロセスで何もしていないときに、親スレッドが孤立していると表示されることです。私はそれがどのように可能かわかりませんか?親スレッドが孤立するのはどうしてですか?
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
int main(void)
{
pid_t Checksum_pid = fork();
if (Checksum_pid < 0)
printf("Fork Failed\n");
else if (Checksum_pid == 0)
{
execl("/bin/ls","ls",(char *)NULL) ;
exit(EXIT_FAILURE);
}
else
{
int childStatus;
pid_t returnValue = waitpid(Checksum_pid, &childStatus, 0);
if (returnValue > 0)
{
if (WIFEXITED(childStatus))
printf("Exit Code: %d\n", WEXITSTATUS(childStatus));
}
else if (returnValue == 0)
printf("Child process still running\n");
else
{
if (errno == ECHILD)
printf(" Error ECHILD!!\n");
else if (errno == EINTR)
printf(" Error EINTR!!\n");
else
printf("Error EINVAL!!\n");
}
}
return 0;
}