フォーク:負の戻り値

フォーク:負の戻り値

fork(2) のマニュアルページから:

RETURN VALUE
   On success, the PID of the child process is returned in the parent, and
   0 is returned in the child.  On failure, -1 is returned in the  parent,
   no child process is created, and errno is set appropriately.

フォークコールが失敗する原因が何であるかを知りたいです。フォークが-1を返す状況は何ですか?

私はCで標準のUnixシェルを書いています。このエラーをどのように処理する必要がありますか?

ベストアンサー1

C APIでは、システムコールはエラーを示すために負の値を返し、エラーコードはerrnoエラーの性質に関する詳細情報を提供します。マニュアルページでは、システムで発生する可能性のあるエラーを説明する必要があります。そこに2つあります基準エラーコード:

  • EAGAIN利用可能なリソースが不足しているため、新しいプロセスを作成できないことを示します(メモリの不足や制限の種類に達した(たとえば、ユーザーあたりまたはプロセス全体の最大数など))。
  • ENOMEMメモリ不足のために新しいプロセスを作成できないことを示します。 Linuxでは、ENOMEMこれはカーネルのメモリ不足を示し、ユーザーモードのメモリ不足はとして報告されますEAGAIN。 OpenBSDでは、ENOMEMユーザースペースのメモリ不足の問題を解決するためにも使用されます。

要約すると、fork利用可能なリソースが不足し(単純なメモリ不足ではなく人為的な制約の形で)失敗する可能性があります。

forkPOSIXは、失敗時のシェルの動作を指定しません。実際には異なるエラー状態を返す傾向があります(pdkshで1、ashから2、bashで254、ksh93から258、tcshで1、zshはエラー0を返します)。学習練習ではなく、本番用にシェルを実装する場合は、追加することをお勧めします。オースティングループメーリングリスト。

おすすめ記事