2016-05-12 6 views
0

fork()をC++で使用しようとしています。 しかし、それは端末上で奇妙に見えます。Linux端末でC++ fork()が異常に見える

私はスクリーンショットで見ることができるように、私のコードはプロセスのPIDと、それが子か親かを出力します。 親プロセスが終了すると、新しいプロンプトで子プロセスの出力が表示されます。

そして、最も重要なことに、whoプログラムが完了した後でも私のコマンドを待っています。

私はまだ画像のように入力を待っている理由を理解していません。

My code and its output

+3

すべてのコードと出力はここに貼り付けて外部サイトにはリンクしないでください。 – crashmstr

+2

テキストの写真を投稿しないで、代わりにテキストとしてテキストを含めてください。 –

答えて

4

fork() "空" プロセスのバイナリを生成しません。呼び出し元プロセスのクローンが作成され、両方のプロセスが並行して実行されます。つまり、フォークされたプロセスが別のプロセスイメージにexecveを持たない場合、または終了すると、同じプログラムの2つのコピーがほぼ同じ状態で並んで終了します。両者の唯一の違いは、子プロセスはforkの戻り値として0を取得し、親プロセスは子プロセスPIDを参照することです。

突然、人が量子レベルにコピーされて元の人と会って、誰がオリジナルで誰が誰であるかを議論しているこれらのSciFiの物語を確かに知っています。それはです。正確にはです。状況の親プロセスと子プロセスはフォークの後です。

さらに重要なことに、whoプログラムが完了した後でも、私のコマンドを待っています。

いいえ、そうではありません。これはあなたのコンソール上のように見えます:親プロセスが終了し、シェルはプロンプトを表示します。その後、プロンプトの後に子プロセスが内容を表示します。

~/... > ./hw3 ; sleep 1 
+0

ありがとう! 私はあなたに投票するのに十分な評判があることを望みます。 –

+0

@JustinOhあなたに投票しました。あなたの質問に答えたら答えを受け入れ、自分で+2を得ることができます。 :-) – jotik

関連する問題