2

ほとんどのフラグが設定されているプロセスからクローンを呼び出す動作に興味があります(2つのプロセスが実行コンテキストを共有するように、つまりアドレス空間、ファイル記述子talbeなどを共有するように)。オンラインの資料を使用して、質問に完全に答えることができませんでした。

ここで、複製されたプロセスからexecveを呼び出すと仮定します。これにより、プロセスのイメージが完全に新しいものに置き換えられ、接続されているメモリセグメントが破棄され、割り当てられたメモリが破棄されますが、親プロセスはどうなりますか?これらの共有(たとえば、すべてのマロックされたメモリ領域)を考えると、それらも割り当て解除されますか?

新しい実行されたプロセスは、引き続き親とアドレス空間を共有しますか?

4

2 に答える 2

1

共有オブジェクトはマッピングされていないかリンクされていませんが、共有の観点からです。

3つのプロセス/スレッドがあり、それらすべてが0x1000から始まるメモリを共有しているとします。

それらの1つはexecveを実行します。次に、shm_unlink(2)0x1000で実行します。 shm_unlink(2)しようとしunlink(2)ます。

これで、そのメモリ範囲を使用するプロセス/スレッドごとにカウンターがあります。この場合、カウンターはの前に3にexecve(2)設定され、その後に2に設定されます。記憶喪失はありません。

プロセスがメモリを使用しなくなると、メモリは「破棄」されます。カウンターが0の場合。

同じことがすべての共有オブジェクトにも当てはまります。システムコールがどのように呼び出され、どのように共有オブジェクトが「破壊」されているかのリストについては、execve(2) マンページのリンクを参照してください。このフレーズを検索します。

All process attributes are preserved during an execve(), except the following
于 2012-08-03T09:29:52.147 に答える
0

親プロセスは、execveの影響を受けません。結局のところ、それは別のプロセスです。プロセスは常に通信に何らかの明示的な方法を使用する必要があります(ファイル、パイプ、共有メモリなどのIPC、シグナルなど)。execを実行する子ではこれらすべてが破棄されるため、明示的に再設定するまで通信はできません。

于 2012-08-03T09:06:57.303 に答える