私はフォークボムで遊んでプロセスを繰り返し分岐すると、初期プロセスを終了するとツリー全体がクラッシュすることがわかりました。 BASHのバックグラウンド演算子&を使用して書かれたフォーク爆弾の場合には該当しないので、この問題を解決する方法があることがわかります。 Cでどのように同じ結果を得ることができますか?
私はウィキペディアのフォークボムの例を使ってきました:http://en.wikipedia.org/wiki/Fork_bomb#Example_fork_bombs
ベストアンサー1
setsid(2)
Cでこれを行う場合は、コードでaといくつかの呼び出しをfork()
実行する必要がありますexit()
。 setsid()
次の効果があります。
...呼び出しプロセスがプロセスグループリーダーでない場合は、新しいセッションを作成します。呼び出しプロセスは新しいセッションリーダーであり、新しいプロセスグループのプロセスグループリーダーであり、制御ttyはありません。
これはマニュアルページからのものです。デフォルトでは、プロセスグループのリーダーであるプロセスがシグナルを受信すると、そのプロセスグループのすべてのプロセスIDはそのシグナルを受け取ります。マニュアルページでこのメカニズムを見ることができますkill(2)
。負のPIDで呼び出されると、kill()
プロセスグループ内のすべてのプロセスに信号が送信されます。
fork()
exit()
また、正しい場所にいる必要があります。基本的に見てくださいデーモンになる方法のガイドライン。あなたがしなければならないこと:
switch (fork()) {
case -1: return -1;
case 0: break;
default: _exit(EXIT_SUCCESS);
}
setsid();
switch (fork()) {
case -1: return -1;
case 0: break;
default: _exit(EXIT_SUCCESS);
}
このコードの根拠について詳しくは、デーモンになることを読んでください。