GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie bekomme ich nur den Benutzer, die PID und den Befehl, der für einen bestimmten Prozess ausgeführt wird? (Ubuntu 11.10)

Ich vermute, Sie suchen nach dem Argument -o:

-o Format:

benutzerdefiniertes format.format ist ein einzelnes Argument in Form einer durch Leerzeichen oder Kommas getrennten Liste, die es ermöglicht, einzelne Ausgabespalten anzugeben. Die erkannten Schlüsselwörter werden im Abschnitt STANDARDFORMAT SPECIFIERS weiter unten beschrieben. Header können beliebig umbenannt werden (ps -o pid,ruser=RealUser -o comm=Command). Wenn alle Spaltenheader leer sind (ps -o pid=-o comm=), wird die Headerzeile nicht ausgegeben. Die Spaltenbreite erhöht sich nach Bedarf für breite Kopfzeilen; Dies kann verwendet werden, um Spalten wie WCHAN(ps -o pid,wchan=WIDE-WCHAN-COLUMN -o comm) zu verbreitern. Eine explizite Breitensteuerung (ps opid,wchan:42,cmd) wird ebenfalls angeboten. Das Verhalten von ps -o pid=X,comm=Y variiert mit der Persönlichkeit; Ausgabe kann eine Spalte namens "X,comm=Y" oder zwei Spalten namens "X" und "Y" sein. Verwenden Sie im Zweifelsfall mehrere -ooptions. Verwenden Sie die Umgebungsvariable PS_FORMAT, um bei Bedarf einen Standardwert anzugeben; DefSysV und DefBSD sind Makros, die verwendet werden können, um die standardmäßigen UNIX- oder BSD-Spalten auszuwählen.

Der gewünschte Befehl wäre also (Ubuntu):

ps -o uid,pid,cmd -ef|grep python

unter OpenSolaris lautet der Befehl:

ps -o ruser,pid,comm -ef|grep python

Das einfachste wäre wahrscheinlich:

$ ps o uid=,pid=,cmd= -C python
1000 26126 python

So erhalten Sie alles direkt von ps und müssen nichts parsen.

Ab der ps Manpage:

-o-Format

Benutzerdefiniertes Format. format ist ein einzelnes Argument in Form einer durch Leerzeichen oder Kommas getrennten Liste, die eine Möglichkeit bietet, einzelne Ausgabespalten anzugeben. [...] Header können beliebig umbenannt werden (ps -o pid,ruser=RealUser -o comm=Command). Wenn alle Spaltenüberschriften leer sind (ps -o pid=-o comm=), wird die Kopfzeile nicht ausgegeben.

-C cmdlist
     Select by command name.  This selects the processes whose executable 
     name is given in cmdlist.

Die -C Option funktioniert, wenn Sie python ausführen interaktiv, nicht wenn Python ein Skript ausführt. In diesem Fall sollten Sie -C scriptname.py verwenden stattdessen.


ps -eo user,pid,cmd | grep [p]ython

Beispiel:

$ ps -eo user,pid,cmd | grep [p]ython
root      1056 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
root      1735 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
user     16613 /usr/bin/python3 /usr/share/system-config-printer/applet.py

Erklärung:

  • -e alle Prozesse
  • -o benutzerdefiniertes Format
  • user,pid,cmd Benutzer, Prozess-ID, Befehlsspalten anzeigen

Hinweis: wenn Sie -f verwenden mit -o Wie andere vorgeschlagen haben, können Fehler auftreten. Dies liegt daran, dass diese beiden Parameter das Ausgabeformat steuern und nur einer von ihnen verwendet werden sollte:

$ ps --help | grep -A 2 "output format"
*********** output format **********
-o,o user-defined  -f full
-j,j job control   s  signal

Linux
  1. CentOS / RHEL :Wie finde ich heraus, welcher Benutzer einen bestimmten Befehl ausführt?

  2. So deaktivieren Sie einen bestimmten Befehl für einen bestimmten Benutzer in Linux

  3. Wie finde ich die Prozess-ID in Ubuntu?

  4. Wie bringe ich meinen Golang-Webserver dazu, im Hintergrund zu laufen?

  5. Wie führe ich einen Befehl als bestimmter Benutzer in einem Init-Skript aus?

So führen Sie einen Befehl für eine bestimmte Zeit in Linux aus

So finden Sie die PID und PPID eines Prozesses in Linux

Eine große Änderung für Samba in Ubuntu 22.04 und wie man sie umgeht

So installieren und verwenden Sie den Bildschirmbefehl Ubuntu 20.04

Erste Schritte und Installation von Wine für Ubuntu

So finden Sie die .pid-Datei für einen bestimmten Prozess