Das sollte (unter Linux) reichen:
ps --ppid 2 -p 2 --deselect
kthreadd
(PID 2) hat PPID 0 (unter Linux 2.6+ ), sondern ps
erlaubt nicht, nach PPID 0 zu filtern; daher diese Problemumgehung.
Eine Möglichkeit, Kernel-Prozesse zu erkennen, besteht darin, dass sie keinen Benutzerspeicher verwenden, also ist das vsz-Feld 0. Dies fängt auch Zombies (danke an Stephane Chazelas für diese Beobachtung), die basierend auf ihrem Status eliminiert werden können.
ps axl | awk '$7 != 0 && $10 !~ "Z"'
Um nur die PIDs aufzulisten:
ps -e -o pid= -o state= -o vsize= | awk '$2 != "Z" && $3 != 0 {print $1}'
In der Praxis fand ich folgende Redewendung ausreichend:
ps auxf | grep -v ]$
Es filtert Zeilen, die mit Klammern enden, was möglicherweise ist Ergebnis Auslassen unerwünschter Einträge, aber es ist sehr unwahrscheinlich. Dafür ist es recht einfach zu merken und relativ schnell zu tippen.
Einige Prozesse wie avahi-daemon fügen ihrem Prozessnamen Informationen in Klammern hinzu (der Hostname im Fall von avahi-daemon) und werden von diesem Befehl herausgefiltert.