Was ist der Terminalbefehl, um die ID eines Prozesses herauszufinden?

12

Ich möchte einen Prozess über die Befehlszeile beenden, kann mich jedoch nicht an den Befehl zum Nachschlagen der Prozess-ID erinnern. Weiß es jemand?

Jumpnett
quelle

Antworten:

13

Der Befehl zum Ermitteln der ID eines Prozesses (mit seinem Namen) lautet pidof. Da Sie jedoch beabsichtigen, den Prozess abzubrechen, gibt es bessere / einfachere Möglichkeiten, als zuerst die pidofPID zu finden:

Angenommen, der Prozess, den Sie beenden möchten, wird eindeutig durch seinen Namen identifiziert (oder Sie möchten alle Prozesse mit diesem Namen beenden), müssen Sie seine PID nicht kennen. Sie können einfach tun killall processname.

Wenn es mehrere Prozesse mit demselben Namen gibt, Sie aber nur einen von ihnen pidofbeenden möchten, hilft Ihnen die Verwendung nicht viel, da Sie die Pids erhalten, aber keine Informationen erhalten, um zu bestimmen, welche der Prozesse Pids gehört zu dem Prozess, den Sie tatsächlich töten möchten.

In diesem Fall können Sie ps aux | grep processnamealle Prozesse mit dem angegebenen Namen sowie die Konsole, auf der sie ausgeführt werden (falls zutreffend) und die Argumente anzeigen, mit denen sie aufgerufen wurden. Auf diese Weise können Sie hoffentlich den gesuchten Prozess identifizieren .

Wenn der Prozess X-Fenster geöffnet hat, können Sie auch xkilltöten (aufrufen xkillund dann auf das Fenster klicken).

sepp2k
quelle
7

Sie sollten einen Blick auf pgrepund pkillzwei sehr handlich und leistungsstark Dienstprogramme , die auf den meisten Linux und UNIX - Systemen zu finden sind.

$ apropos pgrep
pgrep (1) - look up or signal processes based on name and other attributes
sajb
quelle
5

Sie können ps -Aim Terminal ausgeführt werden, um alle Prozesse anzuzeigen (mit ihrer Prozess-ID), die derzeit ausgeführt werden.

TheXed
quelle
Pipe to grep, um nach dem Namen eines bestimmten Prozesses zu suchen:ps -A | grep 'my name'
Gabriel Staples
2

Ich hatte auch ein ähnliches Problem. Ich habe benutzt pstree -p; Dies zeigte mir die aktuell laufenden Prozesse einschließlich der Prozess-IDs.

Meintjes
quelle
interessanter Befehl
jumpnett
1

pidof. Problem man pidoffür Details.

mgunes
quelle
1

Mein Favorit ist pstree -p | grep $(program_name). Dies erfasst den Prozess tatsächlich, hebt ihn hervor und zeigt die PID in Klammern.

Mein nächster Favorit (besonders wenn ich programmiere und alle Pids aus dem Prozess benötige) ist pgrep -law "". Dies gibt Ihnen buchstäblich jede PID, die ausgeführt wird, gefolgt von der Anwendung (mit absolutem Pfad).

Dies kann auf pgrep -lw ""für pid gefolgt vom Programmnamen oder auch nur pgrep -lfür alle pids reduziert werden

Natürlich können Sie nach einem bestimmten Programmnamen (oder einem Teil des Programmnamens) suchen. (dh pgrep -lw firefwird wahrscheinlich so etwas wie "4567 Firefox" anzeigen).

dylnmc
quelle
Wäre nicht pstree -psH $(pgrep prgram_name)besser für den ersten Fall?
Muru
Ja das funktioniert auch. Sie könnten dafür einen Alias ​​erstellen. Ich habe nur $ () verwendet, um den Namen eines Programms darzustellen. Ich denke, dass die Eingabe von $ (pgrep name) aufgrund des Dollarzeichens etwas ärgerlich ist, aber ich denke, ein Alias ​​davon könnte hilfreich sein.
dylnmc
0

Diese Antwort von @Ben auf eine doppelte Frage hat mein Problem gelöst:

Verwenden Sie den topBefehl im Terminal.

   The  top  program  provides  a dynamic real-time view of a running
   system.  It can display system summary information as  well  as  a
   list  of processes or threads currently being managed by the Linux
   kernel.  The types of system summary  information  shown  and  the
   types,  order  and size of information displayed for processes are
   all user configurable and that configuration can be  made  persis‐
   tent across restarts.

via man top

Gui Imamura
quelle