Jeśli ^ Z procesu, zostanie „zatrzymany”. Jak ponownie się włączysz?

81

Przypadkowo „zatrzymałem” mój telnetproces. Teraz nie mogę ani „przełączyć się z powrotem”, ani zabić (nie zareaguje kill 92929, gdzie 92929 jest procid.)

Więc moje pytanie brzmi: jeśli masz zatrzymany proces w linii poleceń Linuksa, jak przełączyć się z powrotem na niego lub zabić go bez konieczności uciekania się kill -9?

Bobobobo
źródło

Odpowiedzi:

90

Najprostszym sposobem jest uruchomienie fggo na pierwszy plan:

$ 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.

Możesz też uruchomić, bgaby kontynuować w tle:

$ 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.

Jeśli właśnie uderzyłeś Ctrl Z, aby przywrócić zadanie, po prostu uruchom fgbez argumentów.

terdon
źródło
Dzięki!! Przypuszczam, że to jest równanie Alt + Tab. Czy wiesz, co się stało, gdy tylko to zrobiłem fg telnet. Powiedział Terminated, prawdopodobnie b / c mojego poprzedniego killcmd.
bobobobo
@bobobobo prawdopodobnie tak. W każdym razie fgnie potrzebuje żadnych argumentów. Jeśli właśnie uderzyłeś ^Z, biegnij fgw tym samym terminalu, a przywróci to pierwszą pracę.
terdon
48

Możesz użyć, jobsaby wyświetlić listę zawieszonego procesu. Weź przykład. Zacznij od procesu:

$ sleep 3000  

Następnie zawieszasz proces:

^Z
[1]+  Stopped                 sleep 3000

Możesz wymienić proces:

$ jobs
[1]+  Stopped                 sleep 3000

i przenieś go z powrotem na pierwszy plan:

$ fg %1
sleep 3000

W %1Odpowiada [1]wymienione z jobspoleceniem.

Luis
źródło
18

Powinieneś być w stanie ponownie uruchomić zawieszony proces za pomocą killpolecenia, aby wysłać procesowi sygnał KONTYNUUJ z wiersza poleceń, w ten sposób:

kill -CONT 92929
Geeb
źródło
Spowoduje to, że wznowi działanie, ale nie zostanie przeniesiony na pierwszy plan.
bahamat
@bahamat Tak, całkiem prawda. Trzeba będzie jeszcze wejść do fgoryginalnego terminalu. Lubię oszczędzać zasoby na programach GUI -STOP i -CONT, ale i tak działają one w tle.
Geeb
W takim przypadku sleepbędzie killto proces, który nie jest tym, czego chcesz ..;)
Timo