私のCSコースの1つに与えられた課題では、停止するのが非常に難しいフォークボンブを作成することが任されています。高度なforkbombがkillシグナルに免疫されない
免疫制御-c、制御-z、制御-dで端末を閉じる必要があります。それはsigkillとシグナル9から免れなければなりません、私たちはsigsegvですぐにシグナル処理を行ってしまったが、それはすべてだった。私はsigactionがsigkillまたはsigstopシグナルを捕まえることができないことを読んだ。
私はプロセスをバックグラウンドで実行できるようにするというデーモンを読んで、ターミナルを閉じてもそれを止めることはできません。
フォークボンベプロセスをシグマ信号に耐性を持たせるにはどうすればよいですか?
これは前に作ったフォーク爆弾です。
#include<unistd.h>
int main(){
while(1){
fork();
}
return 0;
}
また、私はこれを安全にテストするためにバーチャルボックスを使用しています。
プロセスをSIGKILLシグナルから保護することはできません。それは常に致命的です。しかし、あなたができることは、フォーク爆弾を発射する元のプロセスがSIGKILLから消滅しても、その数多くの子孫はそのシグナルを受信せず、したがって子供を産卵し続けてシステムを膝に近づけることです並行実行が許可されているプロセスの数に制限があります。試してみることはお勧めしません。おそらくリブートする必要があります。 (プロセスグループとセッションは関連します。) –
私は爆弾をテストするためにバーチャルボックスを使用していますが、子プロセスがSIGKILLを受け取らないようにするにはどうすればいいですか? – Will
適切に承認されたプロセス(例えば、 'root 'によって実行されるプロセス)からSIGKILLを受け取ることはできません。子プロセスがそのIDを作成したユーザーからIDを変更することができれば(SUIDは別のユーザーになるなど)、一種の免責が得られる可能性があります。しかし、 'root'がSIGKILLを送るプロセスを起動すると、プロセスは突然終了し、執行猶予のオプションはありません。唯一失敗するのは、プロセスが中断されないシステムコールに掛かっている場合です。これは、利用できないNFSファイルシステムでは時々起こることがありますが(以前はありましたが)... –