私はPerlフォークを新たに発見しました。私はかなり恋しています。しかし、一つのことが私に関係しています。もし私がちょうど左右のプロセスを分割しているなら、確かにこれはどこかの問題を引き起こすでしょう。私の小さなアプリケーションが私のマシンのすべてのリソースを使い切っていないことを確認するために使用すべき妥当な種類のチェックがありますか?Perl - 担当フォーク
このサンプルコードください:
foreach my $command (@commands) {
my $pid = fork();
if (!$defined $pid) {
#Fork failed. Do something.
} elsif ($pid == 0) { #This is the child.
system($command);
exit(0)
}
}
while (wait() != -1) {} #wait() will be -1 when the last child exits.
だから、これは正常に動作し、各コマンドを処理するためのプロセスをオフに産卵しますが。これらのコマンドが完全に独立しているとすばらしいことです。
突然実行するコマンドが5,000以上ある場合はどうなりますか?多くのプロセスを無意識のうちにフォークすることは賢明ではありません。だから、どんな種類のチェックを実施すべきか、そしてどのようにしたらいいですか?
)
あの提供「待つ*」APIを介して、あなたのために終了した子プロセスを刈り取りの世話をするあなたはフォークしてきたどのように多くのトラックを保持し、最大で停止されますのでご注意くださいだから、あなたはマシンを殺さずにすぐに非常に怒っているシステム管理者が午前3時に起床するのですか? ;) –
妥当な "max"はなんですか? – Jeremy
あなたが行ったところで 'system'を呼び出すのは馬鹿です。 'system'は基本的に' fork' + 'exec'(子)+' waitpid'(親)です。 'system'を' exec'に変更してください。 – ikegami