Linuxでexecファイルが4つのプロセスを生成するのはなぜですか? [閉鎖]

Linuxでexecファイルが4つのプロセスを生成するのはなぜですか? [閉鎖]

Windowsでは、gcc-linux-4.1(CygWinのクロスコンパイラ)を使用してCygWinでRTAIモデルソース(simulinkで生成)を構築し、ELFを正常に作成しました。 ELFはUbuntuでうまく動作します。

ELFがUbuntuで正しく実行されると、システムモニタに名前は同じですが、プロセスIDが異なる4つのプロセスがあります。

ただし、gccLinuxでソースを構築すると、プロセスは1つだけ生成されるため、呼び出されないことがfork()あります。exec()

1つの実行可能ファイルから4つのプロセスを作成するには?

パフォーマンスps -elF:

F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root      3679  3314  0  57   - -  4362 hrtime 17:44 pts/1    00:00:00 /root/Test/test
5 S root      3680  3679  0  57   - -  4362 poll_s 17:44 pts/1    00:00:00 /root/Test/test
5 S root      3681  3680  0  56   - -  4362 rt_sch 17:44 pts/1    00:00:00 /root/Test/test
5 S root      3682  3680  0 -40   - -  4362 rt_sch 17:44 pts/1    00:00:00 /root/Test/test

ベストアンサー1

一部のプロセスでは、通常、並列実行によるパフォーマンスを向上させるために、実行後に独自のコピーをさらに作成することは完全に正常です。動作方法に関しては、プロセスは forks(2) のものです (実装方法によって exec(2) 自体の他のコピーを実行することも、実行しないこともあります)。man 2 forkとを参照してくださいman 2 exec

デフォルトでは、Linuxの新しいプロセスは最初にfork(2)を使用してそれを呼び出すプログラムのコピーとして作成されます。その後、exec(2)を使用してプロセスイメージを置き換えることができます。たとえば、これはシェルを使用してコマンドを実行するときの一般的なワークフローです。同じプロセスの場合は、後続の実行がない可能性があります。実行しなくても、子プロセスにあることを条件とするコードを実行することもできます。

ケンブリッジ大学はこれがどのように機能するかについての良いページがありますより多くの情報を知りたい場合。

おすすめ記事