クラス プロジェクトに Unix シェルを実装しようとしていますが、いくつかの問題が発生しています。つまりこの方法
void checkStatus()
{
printf("checking status\n");
job_t* checkStart = first_job;
while(checkStart != NULL)
{
process_t* processStart = checkStart->first_process;
while(processStart != NULL)
{
int status;
pid_t test = waitpid(processStart->pid, &status, WUNTRACED | WNOHANG);
printf("%d\n", processStart->pid);
printf("%s\n", strerror(errno));
printf("%d\n", status);
printf("%d\n", test);
if(WIFEXITED(status))
{
printf("exited\n");
}
if(WIFSTOPPED(status))
{
printf("stopped\n");
}
processStart = processStart->next;
}
checkStart = checkStart->next;
}
}
プロセス構造体を更新できるように、実行中または実行済みのすべてのプロセスのステータスを照会することになっています(各プロセスのステータスを出力できる必要があります)。フォアグラウンド プロセスを実行し、ctrl+z を使用して一時停止してこれをテストしようとすると、常に終了したように戻ります。また、ctrl+c を使用して停止すると、使用可能な子プロセスがないというエラーが返されますが、終了も返されます。ステータスのクエリが間違っていますか? また、これはシグナルを使用せずに実装することになっているため、そのルートに進むことはできません。
ありがとう!