フォークシステムコールを使用してプロセスを作成し、子プロセスを待機させようとしています。私は以下を使用しました:linuxシステムコールウェイトを使用したプロセス待機
waitpid(pid、&ステータス、0);
1)最初の問題は、ステータスが8ビット左にシフトされているなどです。たとえば、子プロセスが1を返した場合、waitpid関数はステータス変数のステータス値を256に戻します。なぜそれをやっているのですか?
2)マニュアルに従って、waitpidは、子プロセスが状態を変更するのを待ちます。しかし、それにも書かれています:
「待機()システムコールは終了コール待ち(&ステータス) に相当し、その子の 1まで、呼び出しプロセスの実行を一時停止:。
のwaitpid( - 1、&ステータス、0); "
ここでは、waitpidとwait呼び出しが状態の変更または子プロセスの終了を待つかどうか、少し混乱しています。親切にこの点を明確にしてください。
第3引数のゼロは何を指定しますか?
3)子プロセスをスリープ状態にすると、子プロセスの状態は、例えば5秒待って待機状態に変化しないのですか?
int main(int argc, char ** argv)
{
pid_t pid = fork();
pid_t ppp;
if (pid==0)
{
sleep(8);
printf ("\n I am the first child and my id is %d \n", getpid());
printf ("The first child process is now exiting now exiting\n\n");
exit (1);
}
else {
int status = 13;
printf ("\nI am now waiting for the child process %d\n", pid);
waitpid (pid, &status, 0);
printf ("\n the status returned by the exiting child is %d\n", status>>8);
}
printf("\nI am now exiting");
exit(0);
}
おかげ