Unixのプロセスはどの時点で終了しますか?プロセスを終了するには、プログラムまたはexit(0)
同じコマンドを作成する必要がありますか?return 0
私の問題は、次のコードが原因で発生します。
pid_t pid=fork();
if(pid < 0)
{
perror("Fork error\n");
return 1;
}
else if (pid==0) /* child */
{
printf("CHILD My pid is:%d\n",getpid());
}
else /* parrent */
{
wait(NULL);
exit(0);
}
この例では、子プロセスで呼び出さずexit(0)
(したがってプロセスを終了しないと思います)、親プロセスから呼び出しますwait(NULL)
(したがってプロセスが終了するまで待つ必要があります)。プログラムが終了するので、論理的にサブプロセスはある時点で終了します。子プロセスがいつ終了するかを説明できますか?子供が後で終了する場合
else if (pid==0) /* child */
{
printf("CHILD My pid is:%d\n",getpid());
}/* Probably the child process terminates here but then what is the point of using exit(0) */
だから、それを使用するポイントは何ですかexit(0)
?
ベストアンサー1
ACプログラムは、次の3つの状況のいずれかで終了します。
- プログラムは
main
関数から返されます。戻り値が 0 の場合は成功を示し、それ以外の場合は戻り値は終了状態です。 C99は戻り値型main
を持つ関数も受け入れますが、お勧めしません。ここでfromを返すことは、戻り値の型を使用してmainから0を返すのと同じ意味を持ちます。void
main
int
- プログラムは、
exit
次のいずれかの関数を返すか、exit
C11 の_exit
新しい関数を返します。quick_exit
これらの関数のどれも返されず、どちらもプログラムを終了する効果がありますが、実際に実行する操作は異なります(たとえば、Quick_exitはバッファをフラッシュしますがHonorsatexit
呼び出しを実行しません)。 - たとえば、プログラムが許可されていない操作を実行したため、オペレーティングシステムは何らかの方法でプログラムを終了します。