Jaki jest wpływ CTRL + Z na aplikację unix \ Linux

85

Byłem ciekawy i zdezorientowany, jakie dokładnie jest zachowanie CTRl + Z.

Wiem, że jeśli proces działa na pierwszym planie, a my naciskamy ctrl + z, przechodzi on w tło.

Ale co dokładnie się dzieje.

Czy nadal wykonuje swoją pracę, czy też zostaje zawieszony i zatrzymał się w punkcie, w którym był?

A jeśli w tym momencie zostanie zatrzymany i jakie jest znaczenie pracy w tle.

Kumar Alok
źródło
7
Ctrl-Z nie wysyła procesu w tło, ale go zawiesza.
Wooble,

Odpowiedzi:

70

„Zadanie w tle” to takie, które nie wchodzi w interakcje z użytkownikiem - nie kontroluje tty i po prostu robi swoje (ogólnie po cichu). Zadanie na pierwszym planie jest odwrotne, kontroluje tty w celu interakcji z użytkownikiem.

Control-Z zawiesza najnowszy proces pierwszego planu (ostatni proces interakcji z tty) (chyba że proces ten podejmuje kroki w celu zignorowania zawieszenia, jak to zwykle robią powłoki). Zwykle spowoduje to powrót do powłoki, z której ogólnie można wprowadzić polecenie, bgaby przenieść właśnie zawieszony proces na tło (pozwalając mu dalej działać) lub fgprzenieść go z powrotem na pierwszy plan.

mah
źródło
1
aby cofnąć proces w tle, fgnajpierw określ, które zadanie wystawia, jobs a następnie powiedz, czy jego% 1 to problem fb %1 i proces zostanie wznowiony
Scott Stensland
fg %1niefb %1
ahonnecke
55

Naciśnięcie Ctrl + Z wysyła TSTPsygnał do procesu. Zatrzymuje to wykonywanie (jądro nie planuje więcej czasu procesora na proces), a proces oczekuje CONT na kontynuację przetwarzania.

Możesz to emulować / replikować za pomocą kill -TSTPi kill -CONT(ponieważ killwyśle ​​nominowany sygnał do twojego procesu, pomimo nazwy!)

Powłoka ma funkcję „tła” procesu, ale jest to związek między powłoką a procesem. Sam proces nie ma tak naprawdę pojęcia „tła” lub „pierwszego planu”.

Zobacz tutaj, aby uzyskać więcej informacji.

Brian Agnew
źródło
2
^Zwysyła SIGTSTP, a nie SIGSTOP
William Pursell
@WilliamPursell - ah! Znakomity. Teraz zmienione. Dzięki
Brian Agnew,
15

Rozważ to polecenie, które zajmuje około. 4,5 sekundy na moim laptopie:

echo 2^10000000 | bc -lq | wc -c

Po naciśnięciu Ctrl+ Zobliczenia zostaną zawieszone. Masz możliwość wznowienia obliczeń na pierwszym planie fglub wznowienia go w tle za pomocą bg. Ten ostatni jest mniej więcej równoważny z wykonaniem:

echo 2^10000000 | bc -lq | wc -c &
Bolo
źródło
9

Proces zostaje zawieszony i zatrzymany po naciśnięciu klawiszy Ctrl + Z. Za pomocą fg możesz przenieść zawieszone zadanie na pierwszy plan, za pomocą bg możesz uruchomić je w tle.

Więcej informacji można znaleźć na stronie http://linuxreviews.org/beginner/jobs/ .

alexclooze
źródło