Wie suche ich nach einem Prozess anhand seines Namens, ohne grep zu verwenden?

62

Um nach einem Prozess zu suchen, können Sie psmit grep.

Zum Beispiel um nach Firefox zu suchen

ps aux | grep firefox

Wie bekomme ich die gleiche Antwort ohne zu verwenden grep?

Maythux
quelle
1
Ich bin gespannt, warum Sie dies tun möchten, da die ps/grepLösung so gut funktioniert.
Neuronet
OP will nur einen kürzeren Befehl, würde ich vermuten. Wenn es so etwas ps -n <process name>gäbe, würde das seinem Bedürfnis entsprechen. ps -n firefoxist etwas kürzer als ps | grep firefox. pskann bereits pidnach einer Benutzer-ID filtern oder verarbeiten, daher ist es eine vernünftige Frage, nach Prozessnamen zu filtern.
Jochem Schulenklopper

Antworten:

71

Der pgrepBefehl und seine Geschwister pkillexistieren genau zu diesem Zweck:

  • pgrep firefox listet alle Prozesse auf, deren Befehle übereinstimmen firefox
  • pgrep -f firefox listet alle Prozesse auf, deren gesamte Befehlszeile übereinstimmt firefox
  • pgrep -x firefox listet alle Prozesse auf, deren Befehle genau übereinstimmen firefox
  • ... und so weiter.

Und natürlich pgrepwird sich aus dem Match ausschließen, so dass keines der damit verbundenen grepRituale ps | grepbenötigt wird.


Die anderen Werkzeuge hierfür sind die Befehle pidofund killall. Diese sind nicht so flexibel wie pgrepund pkill.

  • pidof firefox listet Prozesse auf, deren Befehl lautet firefox
muru
quelle
24
ps -fC process-name

Beispiel:

ps -fC firefox

von man ps

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


 -f              Do full-format listing. This option can be combined
                       with many other UNIX-style options to add additional
                       columns. It also causes the command arguments to be
                       printed. When used with -L, the NLWP (number of
                       threads) and LWP (thread ID) columns will be added. See
                       the c option, the format keyword args, and the format
                       keyword comm.
Maythux
quelle
Dies ist die beste Antwort, funktioniert aber unter OSX leider nicht. Das BSD- ps -CFlag verhält sich völlig anders - "Ändere die Art und Weise, wie der CPU-Prozentsatz berechnet wird"
mastaBlasta
2

topErmöglicht die Suche nach Zeichenfolgen, wenn Sie auf Großbuchstaben klicken L. Der Prozess wird hervorgehoben und Sie können mit den Aufwärts- und Abwärtspfeiltasten durch die Liste der Prozesse scrollen. In ähnlicher Weise können Sie mit dem htopBefehl einen bestimmten Prozess markieren, wenn Sie auf drücken /. Und \filtert alle Prozesse mit einer bestimmten Zeichenfolge im Namen.

Für diejenigen , die awk mögen, hier ist ein awk oneliner: ps -eF | awk '/process-name/ {print $11}' . Mit ps -eFProzessname steht immer in der 11. Spalte. Alternativ erhalten Sie ps -eF | awk '{print $11}' | sorteine sortierte Liste der Prozessnamen, alphabetisch sortiert. Pipe es in lessBefehl, nur um die lange Liste der Dateien einfacher anzuzeigen.

Sergiy Kolodyazhnyy
quelle
2

Ein cooler Trick

$ps -ejH

Sie erhalten alle Prozesse mit Namen

exmple:
1747   568   568 ?        00:00:00   colord
1833  1832  1832 ?        00:00:00   gnome-keyring-d
2263   568   568 ?        00:00:00   udisksd
2311  2311  2311 ?        00:00:00   cupsd
2315  2315  2311 ?        00:00:00     dbus

Leiten Sie die Ausgabe um oder kopieren Sie sie in eine Datei. Öffnen Sie dann nano, drücken Sie Ctrl+ Wund Sie können nach dem gewünschten Namen suchen.

Daniel
quelle
1

Sie können auch htopF4 verwenden und dann drücken, um die Ergebnisse mit einer passenden benutzerdefinierten Zeichenfolge zu filtern. Sie haben auch eine benutzerdefinierte Suchfunktion zur Verfügung, indem Sie F3 drücken.

JoErNanO
quelle
1

Wenn zwei Prozesse das Problem sind, können Sie nur grep verwenden:

grep firefox /proc/*/cmdline
user1497298
quelle
0

Ich habe gerade diesen ps-Alias ​​im Lennart Pöttering-Blog gelesen. Die Ausgabe richtet sich nach der Elternschaft der Kontrollgruppe systemd:

alias psc='ps xawf -eo pid,user,cgroup,args'
DDPenga
quelle