Thunderbird: Viele Einträge in 'top'

hehejo

hehejo

blöder Purist
Hallo,

ich nutze die Fluxbox. Wenn ich nun den Thunderbird starte und dann 'top' ausführe, dann sehe ich das was ihr auch im Anhang sehen könnt.
Warum sind da so viele Einträge von 'thunderbird-bin'?
Was soll ein 'netstat <defunct>'?
Und was macht eigentlich das 'run-mozilla.sh', wenn ich den Thunderbird mit 'mozilla-thunderbird &' aus der Konsole herraus starte?
 

Anhänge

  • top.jpg
    top.jpg
    87,2 KB · Aufrufe: 17
hehejo schrieb:
Warum sind da so viele Einträge von 'thunderbird-bin'?
In Linux werden Threads als Prozesse verwaltet. Die Anzeige des belegeten Speichers ist daher identisch und es wird logischerweise nur einmal im Speicher belegt.
Da hat den Vorteil, dass man nicht extra das Handling von Threads implentieren muss und sich so einiges an Overhead sparen kann. ;)

hehejo schrieb:
Was soll ein 'netstat <defunct>'?
Das bedeutet, dass das ein Zombie ist.
Zombie-Prozesse entstehen, wenn ein Prozess forkt (man 2 fork) und dann nicht auf die Beendigung dieses erzeugten Child-Prozesses wartet (man 2 wait).
Zombieprozesse benötigen keinen Speicher, nur die paar KB der Taskstruktur (struct task_struct) in der Prozessliste im Kernel.

Diese kernelinternen Sachen sind sind sehr schön im Buch von Robert Love namens "Linux Kernel Development" beschrieben.

hehejo schrieb:
Und was macht eigentlich das 'run-mozilla.sh', wenn ich den Thunderbird mit 'mozilla-thunderbird &' aus der Konsole herraus starte?
Einige Programme des Mozilla-Projekts werden automatisch von Scripts aufgerufen. Kein Grund zur Sorge. ;)
 
Zuletzt bearbeitet:
normalerweise sollte der kernel den zombie nach einiger zeit entfernen
 
qmasterrr schrieb:
normalerweise sollte der kernel den zombie nach einiger zeit entfernen
Wenn ein Zombie erstmal als Zombie markiert wurde, wird an daran auch nichts mehr geändert. Wie gesagt, es bleibt nur die Task-Struktur im Kernel allokiert. Ich finde das eigentlich nicht schlecht, weil man so besser Bugs aufdecken kann und das so gut wie keine Ressourcen benötigt.
Aber du kannst ja die Kernel-Sourcen dahingehend verändern, sollte eigentlich ganz einfach sein. ;)

Im 2.6er Kernel ist aber eine neue Routine eingebaut, die bei Beendigung des Parents das Child automatisch reparentet, meistens mit init, das sowieso dieses wait-Mechanismus eingebaut hat.
Es kann also nur ein Zombie entstehen, wenn Parent und Child ausgeführt werden, der Child-Prozess sich beendet und danach sich der Parent-Prozess sich ohne wait()en beendet. In dem Fall wird das Reparenten nicht ausgeführt und wir haben einen Zombie. ;)

EDIT:
Ich hab jetzt zum Spass mal in den Kernel-Sourcen nachgeguckt. ;)
Code:
[kernel/exit.c:755]

    state = TASK_ZOMBIE;
    if (tsk->exit_signal == -1 && tsk->ptrace == 0)
        state = TASK_DEAD;
    tsk->state = state;
Weiter unten steht dann:
Code:
[kernel/exit.c:791]

    /* If the process is dead, release it - nobody will wait for it */
    if (state == TASK_DEAD)
        release_task(tsk);
So, hier kannst du noch eine Abfrage für den Fall, dass state == TASK_ZOMBIE ist einbauen, und schon haste kein Zombie-Prob mehr. ;)
Code:
    if (state == TASK_DEAD || state == TASK_ZOMBIE)
        release_task(tsk);
 
Zuletzt bearbeitet:

Ähnliche Themen

thunderbird 3 beta 4 Fehler 143

LVM reparieren? Benötige Hilfe

fußballstatistik auswerten

Samba als PDC

VServer mit SSH

Zurück
Oben