Hallo,

ich habe hier ein simples script für den shutdown meines Rechners wenn ein Prozess länger läuft als gedacht. Ich erstelle ein Liste aller Prozesse des users und stelle die Liste in yad dar. Hier wird einer ausgewählt und ueberwacht. Ist der beendet fährt der Rechner herunter. Würde das gerne für per sudo gestartete Prozesse machen, z. B. ein image per dd schreiben. Gibt es eine Möglichkeit bei ps zwischen manuell per sudo gestarteten Prozessen und vom system ausgeführten zu unterscheiden?

So was wie ps -aux | grep sudo eventuell?

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.