Wenn Sie einen Prozess beenden, wird er gestoppt. Wie schalten Sie wieder ein?

82

Ich habe versehentlich meinen telnetProzess "gestoppt" . Jetzt kann ich weder zurück "schalten", noch kann ich es töten (es reagiert nicht kill 92929, wobei 92929 die Prozess-ID ist.)

Meine Frage ist also, ob Sie einen gestoppten Prozess in der Linux-Befehlszeile haben, wie Sie dorthin zurückwechseln oder ihn beenden, ohne darauf zurückgreifen zu müssen kill -9.

Bobobobo
quelle

Antworten:

91

Der einfachste Weg ist zu rennen fg, um es in den Vordergrund zu bringen:

$ help fg
fg: fg [job_spec]
    Move job to the foreground.

    Place the job identified by JOB_SPEC in the foreground, making it the
    current job.  If JOB_SPEC is not present, the shell's notion of the
    current job is used.

    Exit Status:
    Status of command placed in foreground, or failure if an error occurs.

Alternativ können Sie ausführen bg, um es im Hintergrund fortzusetzen:

$ help bg
bg: bg [job_spec ...]
    Move jobs to the background.

    Place the jobs identified by each JOB_SPEC in the background, as if they
    had been started with `&'.  If JOB_SPEC is not present, the shell's notion
    of the current job is used.

    Exit Status:
    Returns success unless job control is not enabled or an error occurs.

Wenn Sie gerade getroffen haben Ctrl Z, führen Sie den Job fgohne Argumente aus, um ihn wiederherzustellen.

terdon
quelle
Vielen Dank!! Ich nehme an, das ist die Gleichung von Alt + Tab. Wissen Sie , was so schnell passiert , wie ich tat fg telnetthough. Es sagte Terminated, vermutlich b / c von meinem vorherigen killcmd.
Bobobobo
@ Bobobobo vermutlich ja. Jedenfalls fgbraucht der keine Argumente. Wenn Sie gerade getroffen haben ^Z, führen Sie fgdas gleiche Terminal aus und es wird der erste Job zurückgebracht.
Terdon
48

Mit können Sie jobsden angehaltenen Prozess auflisten. Nimm das Beispiel. Beginnen Sie mit einem Prozess:

$ sleep 3000  

Dann unterbrechen Sie den Vorgang:

^Z
[1]+  Stopped                 sleep 3000

Sie können den Prozess auflisten:

$ jobs
[1]+  Stopped                 sleep 3000

und bring es wieder in den Vordergrund:

$ fg %1
sleep 3000

Das %1entspricht dem [1]mit dem jobsBefehl aufgelisteten .

Luis
quelle
18

Sie sollten in der Lage sein, einen angehaltenen Prozess erneut zu starten, indem Sie den killBefehl verwenden, um das Signal CONTINUE von der Befehlszeile aus an den Prozess zu senden.

kill -CONT 92929
Geeb
quelle
Dadurch wird der Betrieb wieder aufgenommen, aber nicht in den Vordergrund gerückt.
Bahamat
@ Bahamat Ja, ganz richtig. Man müsste noch in fgdas ursprüngliche Terminal. Ich mag -STOP und -CONT GUI-Programme, um Ressourcen zu sparen, aber sie laufen trotzdem effektiv im Hintergrund.
Geeb
In dem Fall sleepwird killder Prozess, der nicht das ist, was Sie wollen ..;)
Timo