Ich versuche eine Gabelbombe zu finden, und durch diesen Prozess versuche ich, die Nachkommenzahl jedes Prozesses zu berechnen. Ich möchte jedoch nur die Anzahl der Nachkommen für Nicht-Systemprozesse berechnen, da die Gabelbombe ein Nicht-Systemprozess ist. Ich bin mir jedoch nicht sicher, wie das geht. Das ist, was ich habe, so weit:C - Wie überprüft man, ob ein Prozess ein Systemprozess ist?
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
}
}
Diese Schleife geht bis zur init
Aufgabe korrekt, da es &init_task
ist? Gibt es eine Möglichkeit, stattdessen zum ersten Systemprozess zu gehen und zu stoppen? Weil zum Beispiel die Gabelbombe das unmittelbare Kind eines Systemprozesses ist. Jede Hilfe würde sehr geschätzt werden, danke !!
[EDIT] Und durch Systemprozess, meine ich Dinge wie zum Beispiel, bash
. Ich hätte das besser erklären sollen, aber auf der Basisebene möchte ich keinen Prozess löschen, der beim Hochfahren läuft. Alle Prozesse, die aus User-Space stammen, die nach dem Hochfahren ausgeführt werden, sind faires Spiel, andere Prozesse jedoch nicht. Und ich werde nicht nach irgendetwas wie tomcat
, httpd
suchen, weil ich 100% weiß, dass diese Prozesse nicht ausgeführt werden.
Was ist ein "Systemprozess?" – fuz
Was nennen Sie einen * System * Prozess? Ein Prozess im Besitz von root? Was denkst du über den 'sshd'-Daemon? Was ist mit einem 'Tomcat' oder Apache' httpd' (generell ** nicht ** als root laufen) auf einem Webserver? Möchten Sie eine Whitelist erstellen? Jeder Prozess im System ist ein Enkel von Pid 1 ... –
@SergeBallesta Ich habe meine Frage aktualisiert, Entschuldigung für die unklaren Details! Hoffnung, die Sinn macht. – ocean800