Jak wyszukać proces według nazwy bez użycia grep?

62

Aby wyszukać procesu można korzystać psz grep.

Na przykład, aby wyszukać Firefox

ps aux | grep firefox

Jak uzyskać tę samą odpowiedź bez użycia grep?

Maythux
źródło
1
Jestem ciekawy, dlaczego chcesz to zrobić, skoro to ps/greprozwiązanie działa tak dobrze?
neuronet
Chyba OP chce tylko krótszego polecenia. Gdyby coś takiego ps -n <process name>odpowiadało jego potrzebie. ps -n firefoxjest nieco krótszy niż ps | grep firefox. psmoże już filtrować pidlub przetwarzać dla identyfikatora użytkownika, więc rozsądnym pytaniem jest filtrowanie według nazwy procesu.
Jochem Schulenklopper

Odpowiedzi:

71

pgrepKomenda, a jej rodzeństwo pkill, istnieje dokładnie do tego celu:

  • pgrep firefox wyświetli listę wszystkich procesów, których polecenia pasują firefox
  • pgrep -f firefox wyświetli listę wszystkich procesów, których całe wiersze poleceń są zgodne firefox
  • pgrep -x firefox wyświetli listę wszystkich procesów, których polecenia dokładnie pasują firefox
  • ... i tak dalej.

I oczywiście pgrepwyklucza się z meczu, więc żaden z greprytuałów związanych z nim nie ps | grepjest potrzebny.


Innym zestawem narzędzi do tego są polecenia pidofi killall. Nie są one tak elastyczne jak pgrepi pkill.

  • pidof firefox wyświetli listę procesów, których poleceniem jest firefox
muru
źródło
24
ps -fC process-name

przykład:

ps -fC firefox

od 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
źródło
To najlepsza odpowiedź, ale niestety nie działa na OSX. ps -CFlaga BSD zachowuje się zupełnie inaczej - „Zmień sposób obliczania procentu procesora”
mastaBlasta
2

topumożliwia wyszukiwanie łańcucha po naciśnięciu wielkich liter L; proces zostanie podświetlony i użyj klawiszy strzałek w górę i w dół, aby przewijać listę procesów. Podobnie, htoppolecenie pozwala wyróżnić określony proces po naciśnięciu /. I \odfiltruje wszystkie procesy z określonym ciągiem w nazwie.

Dla tych, którzy lubią awk, oto oneliner awk: ps -eF | awk '/process-name/ {print $11}' . Z ps -eFnazwą procesu jest zawsze w 11 kolumnie. Ewentualnie ps -eF | awk '{print $11}' | sortotrzymasz posortowaną listę nazw procesów, posortowaną alfabetycznie. Umieść go w lesspoleceniu, aby łatwiej przeglądać długą listę plików.

Sergiy Kolodyazhnyy
źródło
2

Fajna sztuczka

$ps -ejH

Otrzymasz wszystkie procesy z nazwami

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

Przekieruj lub skopiuj dane wyjściowe do pliku, a następnie otwórz nano, naciśnij Ctrl+ W i możesz wyszukać żądaną nazwę.

Daniel
źródło
1

Możesz także użyć, htopa następnie nacisnąć F4, aby przefiltrować wyniki z pasującym ciągiem zdefiniowanym przez użytkownika. Możesz także skorzystać z niestandardowej funkcji wyszukiwania, naciskając klawisz F3.

JoErNanO
źródło
1

Jeśli problem stanowią dwa procesy, możesz użyć tylko grep:

grep firefox /proc/*/cmdline
użytkownik1497298
źródło
0

Właśnie przeczytałem ten psias ps na blogu Poetteringa Lennarta. Dane wyjściowe są zgodne z systemowym rodzicielstwem grupy kontrolnej:

alias psc='ps xawf -eo pid,user,cgroup,args'
DDPenga
źródło