Hat der emacs einen Process Viewer (Resource Manager) oder einen gleichwertigen?

14

Gelegentlich werden Emacs 100% der CPU-Auslastung treffen. Offensichtlich liegt in diesem Fall ein Problem mit einem außer Kontrolle geratenen Prozess vor.

Sie fragen sich nur, ob es eine Möglichkeit gibt, alle laufenden Prozesse in Emacs anzuzeigen?

Ein bisschen wie Unix HTOP, der interaktive Systemprozessmonitor und -viewer ... HTOP

orion
quelle
3
list-processes?
Npostavs
@npostavs danke. List-Prozesse ist gut. Aber ich frage mich, ob es etwas gibt, das mehr Informationen zu Ressourcen wie Speicher- und CPU-Auslastung bietet
orion
2
Das einzige, was mir einfällt,
Gesetzesliste
3
Gesetzesliste ist richtig. Ich glaube nicht, dass Sie nach einem Prozess- Viewer suchen (machend list-processesoder procedirrelevant). Der einzige Prozess, den Sie interessieren, ist der (einzelne) Emacs-Prozess selbst, und Sie versuchen herauszufinden, warum er so viel CPU-Zeit und / oder Speicher beansprucht. Dazu benötigen Sie den Emacs-Profiler.
Phils

Antworten:

11

Die Frage wurde im Jahr 2016 gestellt. Jetzt im Jahr 2019 gibt es M-x proced:

Modus zum Anzeigen von Systemprozessen und Senden von Signalen an diese.

Proced erstellt einen Emacs-Puffer mit einer Auflistung der aktuellen Systemprozesse. Sie können die normalen Emacs-Befehle verwenden, um sich in diesem Puffer zu bewegen, und spezielle Proced-Befehle, um die aufgelisteten Prozesse auszuführen. Siehe proced-modefür den Einstieg.

user1404316
quelle
Beachten Sie, dass Sie M-x proced-toggle-auto-updateIhren procedPuffer möglicherweise für ein topähnliches Verhalten mit automatischer Pufferaktualisierung aktivieren möchten (standardmäßig alle 5 Sekunden).
Pierre Thalamy
9

Zusätzlich zu den anderen Antworten sollte das Originalposter möglicherweise die Verwendung der integrierten Profilerstellungsfunktion in Betracht ziehen : https://www.gnu.org/software/emacs/manual/html_node/elisp/Profiling.html

Geben Sie ein, um mit der Profilerstellung zu beginnen M-x profiler-start. Sie können ein Profil nach Prozessorauslastung, Speicherauslastung oder beidem erstellen. Nachdem Sie einige Arbeiten ausgeführt haben, geben Sie ein M-x profiler-report, um einen Zusammenfassungspuffer für jede Ressource anzuzeigen, die Sie zum Profilieren ausgewählt haben. Die Namen der Berichtspuffer enthalten die Zeitpunkte, zu denen die Berichte erstellt wurden, sodass Sie später einen weiteren Bericht erstellen können, ohne vorherige Ergebnisse zu löschen. Wenn Sie die Profilerstellung abgeschlossen haben, geben Sie Folgendes ein M-x profiler-stop(mit der Profilerstellung ist ein geringer Overhead verbunden).

Weitere Informationen zu dieser Funktion finden Sie unter dem obigen Link zum Handbuch.

Gesetzesliste
quelle
7

Vielleicht möchten Sie überprüfen list-processes:

list-processesist eine interaktiv kompilierte Lisp-Funktion in ' simple.el'.

(list-processes &optional QUERY-ONLY BUFFER)

Zeigt eine Liste aller Prozesse an, die Emacs-Unterprozesse sind. Wenn das optionale Argument QUERY-ONLYnicht null ist, werden nur Prozesse mit query-on-exitgesetztem Flag aufgelistet.
Jeder Prozess, der als beendet oder signalisiert aufgeführt ist, wird nach der Auflistung tatsächlich eliminiert.
Optionales Argument BUFFERgibt einen zu verwendenden Puffer anstelle von " *Process List*" an. Der Rückgabewert ist immer nil.

Diese Funktion listet nur Prozesse auf, die von Emacs gestartet wurden. Verwenden Sie ' list-system-processes' , um andere auf dem System ausgeführte Prozesse anzuzeigen .

Es scheint viele Funktionen zu vermissen, die Sie benötigen, aber mit ein wenig Codierung erhalten Sie möglicherweise die gewünschten Ergebnisse (wenn Sie dies tun, senden Sie bitte Ihre Patches in den Originalautoren, ich würde diese Funktion gelegentlich gerne in Emacs sehen.) Ich konnte keine besseren Kandidaten für Ihr Problem finden.

GergelyPolonkai
quelle
6

Schauen Sie sich das Helm-Top an. Es listet alle gewünschten Elemente auf und verfügt über Aktionen zum Senden von Signalen an die Prozesse.

John Kitchin
quelle
5

Ich mag htop und benutze es auch in Emacs. Der interaktive Teil funktioniert jedoch nicht so.

(defun htop ()
  (interactive)
  (if (get-buffer "*htop*")
      (switch-to-buffer "*htop*")
    (ansi-term "/bin/bash" "htop")   
    (comint-send-string "*htop*" "htop\n")))
bertfred
quelle