2012-09-13 12:51:29 +0000 2012-09-13 12:51:29 +0000
88
88

Jaki jest efekt działania CTRL + Z w aplikacji unixowej?

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

Wiem, że jeśli proces działa na pierwszym planie, a my wciśniemy ctrl+z, to przejdzie on na tło.

Ale co dokładnie się dzieje.

Czy proces dalej wykonuje swoją pracę, czy zostaje zawieszony i zatrzymany w miejscu, w którym był.

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

Odpowiedzi (4)

74
74
74
2012-09-13 12:57:13 +0000

Zadanie tła" to po prostu takie, które nie wchodzi w interakcję z użytkownikiem - nie kontroluje tty i po prostu robi swoje (na ogół bezgłośnie). Zadanie pierwszoplanowe jest odwrotne, trzyma kontrolę nad tty, by współdziałać z użytkownikiem.

Control-Z zawiesza ostatni proces pierwszoplanowy (ostatni proces komunikujący się z tty) (chyba że proces ten podejmie kroki ignorujące zawieszenie, jak zwykle robią to powłoki). Spowoduje to powrót do powłoki, z której można wpisać polecenie bg by przenieść właśnie zawieszony proces w tło (pozwalając mu dalej działać) lub fg by przywrócić go na pierwszy plan.

58
58
58
2012-09-13 12:57:09 +0000

Naciśnięcie Ctrl+Z wysyła sygnał TSTP do twojego procesu. To zatrzymuje wykonywanie (jądro nie zaplanuje więcej czasu procesora dla tego procesu) i proces oczekuje na CONT, aby kontynuować przetwarzanie.

Możesz emulować/replikować to przez kill -TSTP i kill -CONT (ponieważ kill wyśle nominowany sygnał do twojego procesu, pomimo nazwy!)

Powłoka ma funkcjonalność “tła” procesu, ale jest to relacja pomiędzy powłoką a procesem. Sam proces tak naprawdę nie ma pojęcia ‘tła’ lub ‘pierwszego planu’.

Zobacz tutaj po więcej informacji.

15
15
15
2012-09-13 13:02:52 +0000

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

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

Gdy naciśniesz Ctrl+Z, obliczenia zostaną zawieszone. Masz możliwość wznowienia obliczeń na pierwszym planie za pomocą fg, lub wznowienia ich w tle za pomocą bg. To drugie rozwiązanie jest mniej więcej równoważne wykonaniu:

echo 2^10000000 | bc -lq | wc -c &
9
9
9
2012-09-13 12:57:30 +0000

Proces jest zawieszany i zatrzymywany po naciśnięciu ctrl+z. Za pomocą fg możesz przenieść zawieszone zadanie na pierwszy plan, za pomocą bg możesz uruchomić je w tle.

Zobacz http://linuxreviews.org/beginner/jobs/ po więcej informacji.