Wie kann ich einen Job beenden, der in einer anderen Shell (Terminalfenster oder Registerkarte) initiiert wurde?


9

Wenn ich einen Prozess beginne und ihn in einem Terminalfenster hinterlege (z. B. ping google.com &), kann ich ihn mit kill %1beenden (vorausgesetzt, es handelt sich um Job 1).

Wenn ich jedoch ein anderes Terminalfenster (oder eine andere Registerkarte) öffne, wird der Hintergrundprozess nicht unter aufgelistet jobsund kann nicht direkt mit beendet werden kill.

Ist es möglich, diesen Prozess über ein anderes Terminalfenster oder eine andere Registerkarte abzubrechen?

Hinweis: Ich verwende den Xfce Terminal Emulator 0.4.3 und bash (obwohl ich auch dafür offen bin, wenn eine Lösung in einer anderen gemeinsamen Shell vorhanden ist, aber nicht bash).

Antworten:


10

Ja, Sie müssen lediglich die Prozess-ID (PID) des Prozesses kennen. Sie können dies mit dem psBefehl oder dem pidofBefehl finden.

kill $(pidof ping)

Sollte von jeder anderen Shell aus funktionieren. Wenn dies nicht der Fall ist, können Sie ps und grep zum Pingen verwenden.


6

Wenn Sie topin ein anderes Terminalfenster eingeben, wird der gesamte laufende Prozess aufgelistet. Notieren Sie sich die Prozess-ID Ihres jobdortigen und drücken Sie dann q, um diesen Bildschirm zu verlassen. Dann killder Vorgang wie gewohnt.


Vielen Dank für Ihre Antwort, aber topes werden nicht alle spezifischen Prozesse angezeigt, die in der Shell ausgeführt werden (z. B. werden sie nicht angezeigt ping). Es gibt mir eine PID für den Terminalemulator, aber das tötet den Terminalemulator wie erwartet.
DQdlM

1
Wenn Sie top -U yourusernameTerminal eingeben, wird nur der von Ihnen verwendete Prozess aufgelistet.
Arthankamal

genial! +1 nur dafür! danke
DQdlM

Wenn Sie oben sind, drücken Sie k und dann 15 für einen Soft-Kill (versuchen Sie es zuerst), 9 für einen Hard-Kill.
Michael Durrant

4

Normalerweise mache ich so etwas:

ps aux | grep $PROCESS | grep -v grep | awk '{print $2 " " $11}'

Wenn beispielsweise $ PROCESS = "bash" ist, ist dies die Ausgabe meiner aktuellen Sitzung:

2683 bash
4481 bash
5695 bash

Dann würde ich kill $PIDfür was auch immer /bin/bashich nicht mehr laufen möchte.

ps, grepund (optional) awksind hilfreich für die Suche nach PIDs zu kill.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.