Esto debería hacer (bajo Linux):
ps --ppid 2 -p 2 --deselect
kthreadd
(PID 2) tiene PPID 0 (en Linux 2.6+ ) pero ps
no permite filtrar por PPID 0; por lo tanto, esta solución alternativa.
Una forma de reconocer los procesos del núcleo es que no utilizan memoria de usuario, por lo que el campo vsz es 0. Esto también atrapa zombis (gracias a Stephane Chazelas por esta observación), que pueden eliminarse según su estado.
ps axl | awk '$7 != 0 && $10 !~ "Z"'
Para enumerar solo los PID:
ps -e -o pid= -o state= -o vsize= | awk '$2 != "Z" && $3 != 0 {print $1}'
En la práctica encontré suficiente el siguiente modismo:
ps auxf | grep -v ]$
Filtra las líneas que terminan con corchetes, que podrían resultado omitiendo entradas no deseadas pero es muy poco probable. A cambio, es bastante fácil de recordar y relativamente rápido de escribir.
Algunos procesos como avahi-daemon agregan a su nombre de proceso información entre paréntesis (el nombre de host en el caso de avahi-daemon) y serán filtrados por este comando.