私はフォークボムを検出しようとしています。そのプロセスを通して、各プロセスの子孫カウントを計算しようとしています。しかし、フォークボンベは非システムプロセスであるため、非システムプロセスの子孫数を計算したいだけです。しかし、どうしたらいいのか分かりません。これは私がこれまで持っているものです。C - プロセスがシステムプロセスであるかどうかを確認するには?
struct task_struct *pTask;
for_each_process(pTask)
{
struct task_struct *p;
*p = *pTask;
//trace back to every ancestor
for(p = current; p != &init_task; p->parent)
{
//increment the descendant count of p's parent
}
}
それは&init_task
ですので、このループは、正しいinit
タスクに上がりますか?代わりに最初のシステムプロセスに行き、停止する方法はありますか?例えばフォーク爆弾はシステムプロセスの直下の子になるからです。どんな助けでも大歓迎です、ありがとうございます!
[編集] システムプロセスによって、私は例えばbash
のようなものを意味します。私はもっとはっきりと説明したはずですが、基本レベルでは、ブートアップから実行されるプロセスを削除したくありません。起動後に実行されるユーザー空間からのプロセスは、公正なゲームですが、他のプロセスはそうではありません。 tomcat
、httpd
のようなものはチェックしません。なぜなら、これらのプロセスが実行されないことを100%知っているからです。
「システムプロセス」とは何ですか? – fuz
*システム*プロセスとは何ですか? rootが所有するプロセス?あなたは 'sshd'デーモンについてどう思いますか? Webサーバー上の 'tomcat'やApacheの' httpd'(一般的に**ルートとして実行されない**)はどうでしょうか?ホワイトリストを作成しますか?システム内のすべてのプロセスはpid 1の壮大な子です... –
@SergeBallesta私は質問を更新しました。不明な点がありましたらごめんなさい!希望は意味をなさない。 – ocean800