フォークする前に何を呼び出すべきですか?

フォークする前に何を呼び出すべきですか?

ずっと前に、私はロンドンの非常に奇妙な会社とインタビューに行きましたが、Unixの専門コンサルタントだと主張しました。とにかく、これらの人々は狂っていて当然会社がもう存在しないようですが、インタビュー中に彼らは私に次の質問をしました。

新しいプロセスを開始するための最初の要求は何ですか?

だから最初の電話はと答えましたfork。私にインタビューした二人は(とても明らかな事実を逃したようにとても執拗に)こう言われました。

あなたは何を呼んでいますか?今後フォークを作りますか?

今、私はこの問題について全く知りませんし、これらの人々はこの問題と全く関係のない理由で自分が完全な愚かだと信じさせましたが、どのような理由であるのか、この問題は今でもまだ私を悩ませています。フォークの前に通話が行われましたか?私は少し微妙さを逃しましたか?

答え1

推測しかできないので、これを答えで言うのは簡単ではありません。しかし、次のようになります。

  1. サブプロセスが実行前に出力を希望する場合は、標準出力をフラッシュします。
  2. 新しいプロセスにシェルから取得した「標準」環境が必要であると仮定し、2より大きい開いているファイル記述子をすべて閉じます。
  3. いくつかのあいまいなバリエーションにはあいまいなものが必要です。ユニスどんなに賢くても、彼らはこれを知っています。

それにもかかわらず、あいまいな事実に関する質問をすることは、彼らが愚かな質問にどのように答えるかを除いて、候補者について何も明らかにしません。

答え2

私の考えは、親プロセスが子プロセスの標準入力または標準出力を制御する方法を提供するために「パイプ」を呼び出す必要があることを意味しているようです。これは「フォーク」の前に発生する最も一般的な呼び出しです。

同意します。これはひどい質問です。パイプラインなどの一部としてプロセスを作成すると指定した場合は、良い質問になります。作業順序を理解することが重要です。 「フォーク」の前にパイプを作成し、各プロセスで未使用の反対側の端を閉じ、「dup2」を使用して子プロセスの記述子を正しい場所に配置し、「exec」「Child」を呼び出します。機能、処理失敗など

(専門家の推測があるという事実は、それが悪い質問であることを証明します。)

答え3

私の推測は

  • 彼らは、バッファフラッシュのように言及するにはあまりにも怠惰な特定の場合にのみ適用されることを検討しています。
  • それともあなたが何かをするという意味です。後ろに分岐
  • それともあなたが何かをするという意味です。今後 execve(他のプログラムを生成する残りの半分)答えを期待していますforkが、実際には全体を理解しておらず、両方を混同します。

関連情報