Ein weiterer Ansatz wäre die Prozeßliste des Users mittels der realen Benutzerkennung zu erstellen.
Es gibt die reale Benutzerkennung(Name oder UID) und die effektive. Die Effektive(euser/EUID) bezeichnet die, unter deren Kennung der Prozeß läuft. Die Reale(ruser,RUID) identifiziert die, unter deren Kennung ein Prozeß gestartet wurde.
Als Beispielprozeß verwende ich dd (ohne weitere Argumente!) in einem (tmux)Terminal, einmal als User gestartet und einmal mit sudo dd
Mein ps-Befehl sieht so aus:
ps f -U gerhard -o ruser,euser,pid,args
Der wichtigste Schalter ist -U <username>, im Gegensatz zum Default -u <username> (kleines U). f zeigt in der Programm/ARGS-Spalte das ganze als Baum aus (übersichtlicher für hier) und als Spalten werden nur ruser,euser,pid und args angezeigt. Ich zeige hier auch nur die relevanten Prozesse.
1) dd ohne sudo:
RUSER EUSER PID COMMAND
gerhard gerhard 2069907 tmux
gerhard gerhard 2069908 \_ -bash
gerhard gerhard 2077034 | \_ ps f -U gerhard -o ruser,euser,pid,args
gerhard gerhard 2069929 \_ -bash
gerhard gerhard 2077033 \_ dd
Reale und Effektive Kennung sind identisch.
2) dd mit sudo:
RUSER EUSER PID COMMAND
gerhard gerhard 2069907 tmux
gerhard gerhard 2069908 \_ -bash
gerhard gerhard 2077474 | \_ ps f -U gerhard -o ruser,euser,pid,args
gerhard gerhard 2069929 \_ -bash
gerhard root 2077464 \_ sudo dd
gerhard root 2077471 \_ sudo dd
Hier differieren die Kennungen. Mein User hat den Prozeß gestartet(RUSER), wegen sudo läuft dieser aber als root(EUSER).
Angezeigt wird er mir in der "ps nach Benutzer" trotzdem, da wir mittels -U nach der realen Kennung filtern.
Als Gegenstück jetzt gleiches 'sudo dd', aber bei ps mit kleinem U (-u, Filter nach effektiver Kennung, default):
RUSER EUSER PID COMMAND
gerhard gerhard 2069907 tmux
gerhard gerhard 2069908 \_ -bash
gerhard gerhard 2078015 | \_ ps f -u gerhard -o ruser,euser,pid,args
gerhard gerhard 2069929 \_ -bash
Wie man sieht, wird der per sudo gestartete Prozeß nicht erfaßt wenn wir nur nach der effektiven Userkennung filtern.
Für deinen ps-Befehl zur Erstellung der Liste sollte es also funktionieren, wenn:
-U <username>
in die Argumentliste aufgenommen wird. //Edit: bzw. ein vorhandenes "kleines u" ersetzt.
//Edit2:
Was bei "sudo dd" nicht in der Ausgabeliste auftaucht (egal ob nach effektiver oder realer Kennung gefiltert) ist der Prozess/PID mit dem realen dd. Dieser Prozeß läuft ja nach/durch dem sudo als RUSER und ESUSER root. Es wird lediglich der Steuerungsprozeß, also der sudo-Aufruf aufgenommen in die Filterung. Praktisch sollte das keine Auswirkung haben, da wenn das eigentliche root-dd beendet ist der angezeigte Steuerprozeß ebenfalls beendet wird.