web-dev-qa-db-ja.com

フォークの前に何を呼びますか?

ずっと前に、私はロンドンの完全に奇妙な会社に就職の面接に行きました。彼は専門家のUnixコンサルタントであると主張しました。とにかく、これらの人々は完全に無口であり、当然のことながら、会社はもうそこにいないようですが、インタビューで彼らは私に次の質問をしました:

新しいプロセスを開始するために最初に行う電話は何ですか?

だから私は最初の呼び出しはforkであると答えました。私にインタビューした二人は言った(私がまったく明白な何かを見逃したかのように、非常にしつこく)

あなたはどのような呼びかけをしますかあなたはフォークをしますか?

さて、私はこの質問について何も知りません、そして私はこれらの人々がこの質問とは全く関係のない理由で彼らが軽減されていない馬鹿であると私に確信させたと言わなければなりません、しかし何らかの理由でこの質問は今でも私を悩ませています。フォークの前に行われる呼び出しはありますか?私が見逃した微妙な点はありますか?

5
delete

推測することしかできないので、これを答えとして置くことを躊躇しますが、:

  1. 子がexecの前に出力を行う場合に備えて、stdoutをフラッシュします。
  2. 新しいプロセスがシェルから取得するような「標準」環境を期待していると想定して、2より大きい開いているファイル記述子をすべて閉じます。
  3. Eunice のようないくつかのあいまいなバリアントに必要ないくつかのあいまいなことは、彼らが知っていることは非常に賢いです。

いずれにせよ、あいまいな事実の質問をすることは、おそらく彼らが愚かな質問にどのように答えるかを除いて、候補者について何も導き出す方法ではありません。

7
msw

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

私は同意します、それは悪い質問です。パイプラインなどの一部としてプロセスを作成していると彼らが指定していたとしたら、それは良い質問です。操作の順序を知ることは重要です-「フォーク」の前にパイプを作成し、各プロセスで反対側の未使用の端を閉じ、「dup2」を使用して子の記述子を適切な場所に配置し、いくつかの「exec」を呼び出します'子の機能、障害の処理など。

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

4
David Schwartz

私の推測では

  • バッファのフラッシュなど、わざわざ言及しなかった特定の状況にのみ適用できることを考えていたのです。
  • または、あなたがすることを意味していましたafter forking;
  • または、あなたがすることを意味していましたbeforeexecve(これは、別のプログラムを生成する残りの半分です)、答えforkを期待していましたが、実際にはそうではありませんでした全体を理解し、2つを混乱させました。