Der Befehl `jobs` zeigt keine Hintergrundprozesse an

8

Als ich mit meinem Desktop im Büro war, habe ich run.shviermal im Hintergrund ein Skript gestartet .

run.sh parameter1 &
run.sh parameter2 &
run.sh parameter3 &
run.sh parameter4 &

Dann kam ich nach Hause und öffnete ein Terminal auf meinem Laptop, ssh zum Desktop in meinem Büro. Beim Ausführen ps -u jacksah ich die gestarteten Prozesse:

 3562 pts/1    00:00:00 bash
 4540 pts/2    00:00:00 bash
 4643 pts/3    00:00:00 bash
 4748 pts/4    00:00:00 bash

Aber als ich tippte jobs, bekam ich nichts. Warum konnte ich diese vier laufenden Hintergrundprozesse sehen?

Übrigens, wie kann ich sie zu meinem aktuellen Terminal zurückbringen, damit ich beispielsweise einen von ihnen töten kann run.sh parameter4 &?

JackWM
quelle
Wo haben Sie das Skript auf einem Remotecomputer gestartet?
Fedorqui
@fedorqui Nein, das Skript wurde direkt auf meinem Desktop gestartet.
JackWM
Haben Sie den jobsBefehl in derselben Shell ausgeführt?
@Grzegorz Nein, ich habe einen neuen von meinem Laptop aus geöffnet.
JackWM

Antworten:

7

Aufgrund der Problemstellung der Frage sehe ich meiner Meinung nach keinen Grund für die Verwendung von backgroundoder foreground. Alles, was Sie interessiert, ist, einen Prozess zu finden, der im Hintergrund ausgeführt wird, damit Sie ihn beenden können.

Ausführen ps -ef | grep parameter3, um Prozesse zu finden, deren parameter3Prozessname enthalten ist. Sie können das anpassen grep, um einen Prozess eindeutig zu identifizieren, da Sie nicht über zwei Prozesse mit genau demselben Prozessnamen verfügen.

Sobald Sie es haben, tun Sie es einfach kill -9 PIDund dieser Prozess wird beendet. Es ist also nicht nötig, diesen Prozess in den Vordergrund zu stellen, um ihn zu beenden.

Hoffe das hilft.


quelle
Ich habe gesehen, jack 15766 3562 0 Jun12 pts/1 00:00:00 /bin/bash ./run.sh 015d4a826e43f416welche Nummer ist die PID?
JackWM
@ JackVW Die zweite Spalte ist die PID. Also wirst du es tun kill -9 15766. Wenn Sie sich interessieren, ist die dritte Spalte PPID (PID des übergeordneten Prozesses).
2
Warum kill -9? Es ist fast immer besser, zuerst kill ohne den Signalparameter zu verwenden. Auf diese Weise kann der abgebrochene Prozess vor dem Beenden aufgeräumt werden, wenn er auf diese Weise programmiert wurde. Wenn sich der Prozess immer noch weigert zu sterben, können Sie kill -9 verwenden.
Adrian Pronk
16

Dies liegt daran jobs, dass Hintergrundbefehle angezeigt werden, die von derselben Shell gestartet wurden (zu derselben gehören). Die Shell-Prozesse, die unter Ihrem Desktop-Terminal und unter dem SSH-Terminal ausgeführt werden, sind unterschiedlich.

Siehe http://www.gnu.org/software/bash/manual/html_node/Job-Control-Basics.html

Um Ihre Prozesse als Jobs von verschiedenen Terminals aus steuern zu können, können Sie virtuelle Terminalmanager verwenden screenoder tmuxdiese wieder mit einer beliebigen Anzahl anderer Terminals verbinden.

Wenn Sie es beispielsweise screeneinfach starten, wird Ihre Standard-Shell geöffnet und Sie arbeiten damit wie mit jeder anderen Shell. Wenn Sie dann nach Hause kommen und ssh an Ihren Büromaschinen senden, können Sie screen -d -rdas virtuelle Terminal von Ihrem Office-Desktop-Terminal trennen und an Ihr ssh-Terminal anschließen, um die Arbeit fortzusetzen. Sie können das virtuelle Terminal von sich screenselbst trennen, indem Sie Strg-A drücken, d.

spbnick
quelle
Vielen Dank für die Informationen. Wie kann ich sie dann zu meinem aktuellen Terminal zurückbringen?
JackWM
2
Wenn Sie Dinge sozusagen "im Hintergrund" ausführen und später wieder aufnehmen möchten, ist etwas wie GNU Screen oder tmux hilfreich. Auf diese Weise können Sie von allen nachfolgenden Shell-Sitzungen fortfahren, während Sie, wie oben beschrieben, nur Hintergrundjobs aus derselben Shell in den Vordergrund stellen können.
Fred Clausen
@ JackWM verwendenfg
@ Bill Benötigt fgeine Hintergrundprozessnummer, die ich nicht habe?
JackWM
2
@ JackWM können Sie mit unterscheiden parameter3. run ps -ef | grep parameter3und dies gibt Ihnen die PID eines Prozesses, der enthält parameter3. Sie können dies an Ihre Bedürfnisse anpassen. Ich neige dazu, die Dinge so einfach wie möglich zu halten. Wenn alles, was Sie brauchen, ist, ein zu identifizieren, pidum es zu töten, sehe ich wirklich keine Notwendigkeit für bgund fg, was das Leben kompliziert macht :)