私はこの機能を持っています:
void set_background(int n){
int i;
for(i=0;i<n;i++)
fork();
}
このプロセスは、フォークで n 個のプロセスを設定する必要があります。fork() を実行して for に n 個のプロセスを設定するにはどうすればよいですか? 親プロセスと子プロセスがあり、4 つのプロセスで i=1 になる場合など
からの戻り値を監視する必要がありますfork()
。
void set_background(int n)
{
for (int i = 0; i < n; i++)
{
pid_t pid;
if ((pid = fork()) < 0)
...process error...
else if (pid == 0)
{
...do childish things...
exit(EXIT_FAILURE);
}
}
/* If here, must be parent */
}
「幼稚な」処理が戻らないようにすると、制御の流れが簡素化されます。私はexit(EXIT_FAILURE);
電話でそれを強制しました。
元のコードでは、ループの最初の反復で親が分岐するため、ループの最後で 2 つのプロセスが実行されていることに注意してください。2 回目の反復の後、親と子の両方がフォークするため、4 つのプロセスが実行されます。N 回目の繰り返しの後、2 N 個のプロセスが実行されています。これが望ましい効果になることはめったにありません。これの無制限ループ バージョンは「フォーク ボム」と呼ばれ、マシンを屈服させることができます。