Cela devrait faire (sous Linux):
ps --ppid 2 -p 2 --deselect
kthreadd
(PID 2) a PPID 0 (sur Linux 2.6+ ) mais ps
ne permet pas de filtrer pour PPID 0 ; donc cette solution de contournement.
Une façon de reconnaître les processus du noyau est qu'ils n'utilisent aucune mémoire utilisateur, donc le champ vsz est 0. Cela attrape également les zombies (merci à Stéphane Chazelas pour cette observation), qui peuvent être éliminés en fonction de leur statut.
ps axl | awk '$7 != 0 && $10 !~ "Z"'
Pour lister uniquement les PID :
ps -e -o pid= -o state= -o vsize= | awk '$2 != "Z" && $3 != 0 {print $1}'
En pratique, j'ai trouvé l'idiome suivant suffisant :
ps auxf | grep -v ]$
Il filtre les lignes se terminant par des crochets, ce qui pourrait résultat en omettant les entrées indésirables, mais c'est très peu probable. En échange, il est assez facile à retenir et relativement rapide à taper.
Certains processus comme avahi-daemon ajoutent à leur nom de processus des informations entre parenthèses (le nom d'hôte dans le cas d'avahi-daemon) et seront filtrés par cette commande.