Questo dovrebbe fare (sotto Linux):
ps --ppid 2 -p 2 --deselect
kthreadd
(PID 2) ha PPID 0 (su Linux 2.6+ ) ma ps
non consente di filtrare per PPID 0; quindi questa soluzione alternativa.
Un modo per riconoscere i processi del kernel è che non usano alcuna memoria utente, quindi il campo vsz è 0. Questo cattura anche gli zombi (grazie a Stephane Chazelas per questa osservazione), che possono essere eliminati in base al loro stato.
ps axl | awk '$7 != 0 && $10 !~ "Z"'
Per elencare solo i PID:
ps -e -o pid= -o state= -o vsize= | awk '$2 != "Z" && $3 != 0 {print $1}'
In pratica ho trovato sufficiente il seguente idioma:
ps auxf | grep -v ]$
Filtra le righe che terminano con parentesi, cosa che potrebbe risultato omettendo voci indesiderate ma è molto improbabile. In cambio è abbastanza facile da ricordare e relativamente veloce da digitare.
Alcuni processi come avahi-daemon aggiungono informazioni al loro nome di processo tra parentesi (il nome host nel caso di avahi-daemon) e verranno filtrati da questo comando.