Jak zawiesić i wznowić procesy


143

W terminalu bash mogę nacisnąć Control+, Zaby zawiesić dowolny uruchomiony proces ... a następnie mogę wpisać, fgaby wznowić proces.

Czy można zawiesić proces, jeśli mam tylko jego PID? A jeśli tak, jakiego polecenia powinienem użyć?

Szukam czegoś takiego:

suspend-process $PID_OF_PROCESS

a następnie wznowić za pomocą

resume-process $PID_OF_PROCESS

Odpowiedzi:


172

Możesz użyć, killaby zatrzymać proces.

Aby zatrzymać proces jako „uprzejmy” (wybierz to dla normalnego użytkowania), wyślij SIGTSTP:

kill -TSTP [pid]

W celu „twardego” zatrzymania wyślij SIGSTOP:

kill -STOP [pid]

Zauważ, że jeśli proces, który próbujesz zatrzymać za pomocą PID, znajduje się w tabeli zadań twojej powłoki, może tam pozostać widoczny, ale zostanie zakończony, dopóki proces nie zostanie fgponownie wykonany.

Aby wznowić wykonywanie procesu, wysłano SIGCONT:

kill -CONT [pid]

25
Chyba że istnieją inne powody, wolałbym SIGTSTP niż SIGSTOP, ponieważ niektóre aplikacje obsługują SIGTSTP specjalnie. Na przykład, jeśli scp pokazuje pasek postępu, SIGTSTP spowoduje, że wyczyści tryb terminalu przed zawieszeniem, ale jeśli wyślesz SIGSTOP, nie będzie miał takiej możliwości.
ephemient

3
@ efhemient Próbowałem SIGTSTP, widziałem, co mówisz o tym, sprzątając terminal. Dzięki za wyjaśnienie SIGTSTP, zawsze dobrze jest uczyć się nowych rzeczy :)
Steve Burdine

2
Warto również zauważyć, że można odwoływać się do wartości [pid] za pomocą symbolu%, a następnie numeru zadania (takiego, który można znaleźć, uruchamiając jobs). Więc poszedłbyś:kill -TSTP %1
Karoh


43

W tym celu należy użyć killpolecenia.

Aby być bardziej gadatliwym - musisz określić właściwy sygnał , tj

$ kill -TSTP $PID_OF_PROCESS

za zawieszenie procesu i

$ kill -CONT $PID_OF_PROCESS

za wznowienie. Udokumentowane tutaj .


Zastanawiam się, jaki wypadek historii spowodował, że ta odpowiedź uzyskała mniej głosów? Odpowiedzi są prawie takie same, a ta była pierwsza ...
Wildcard,

7
@Wildcard, kiedy stworzyłem odpowiedź, trochę się spieszyłem, więc w zasadzie zawierała ona tylko pierwszą część kill -TSTP(tj. Jak zawiesić). 1/2 roku później, tj. W 2011 r., Ponownie przejrzałem swoją odpowiedź i zauważyłem jej niepełność. W ten sposób zredagowałem go i dodałem także kill -CONTczęść. To powinno wyjaśnić różnicę głosów w porównaniu z odpowiedzią Steve'a.
maxschlepzig
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.