suspend
to wbudowane polecenie w Bash. Kiedy naturalnie użyjesz tego polecenia i uznasz je za przydatne?
12
suspend
to wbudowane polecenie w Bash. Kiedy naturalnie użyjesz tego polecenia i uznasz je za przydatne?
fork/exec
wywołanie systemoweSTOP
sygnału), gdy wywołuje proces potomny. Jestem trochę zdezorientowany twoim drugim komentarzem.wait()
brzmi rozsądnie dla mnie. Powiedziałem, że Powłoka zawiesza się za każdym razem, gdy wywołuje proces potomny . Nie mówiłem nic o otrzymywaniu sygnałów stop, co nie miałoby sensu.Odpowiedzi:
Powiedzmy, że brakuje ci zarówno GNU, jak
screen
itmux
(i X11 oraz konsol wirtualnych), ale chcesz przełączać się między powłoką logowania a inną powłoką interaktywną.Najpierw zaloguj się na konsoli, a następnie uruchom nową powłokę, tymczasowo blokując powłokę logowania. Aby odzyskać powłokę logowania, aby wykonać tam trochę pracy, zrobiłbyś to
suspend
. Następnie musiszfg
odzyskać interaktywną powłokę, aby kontynuować wszystko, co tam zrobiłeś.W rzeczywistości, z kontrolą pracy, powłoka logowania mogłoby zapoczątkować szereg interaktywnych muszli jako zadania w tle, które można przełączyć się z
fg %1
,fg %2
itd., Ale aby wrócić do powłoki logowania, trzeba by użyćsuspend
, jeśli nie chciał ręczniekill -s STOP $$
.Zauważ też, że Ctrl+ Zpo znaku zachęty w interaktywnej powłoce go nie zawiesi.
EDYCJA: Początkowo miałem długą hipotetyczną sekcję dotyczącą użycia
suspend
skryptu, ale ponieważ polecenie wymaga kontroli zadań, a ponieważ powłoki nieinteraktywne zwykle nie mają kontroli zadań, usunąłem tę sekcję.Usunięta sekcja z
suspend
zastąpioną przezkill -s STOP $$
(to naprawdę nie należy już do odpowiedzi, ale i tak może być interesujące dla innych):Załóżmy, że masz skrypt działający w tle (skrypt) i że ten proces w pewnym momencie musi się zatrzymać i poczekać, aż proces nadrzędny poinformuje go o kontynuacji. Może to być tak, że rodzic ma czas na wyodrębnienie i przeniesienie plików na miejsce lub coś w tym rodzaju.
Skrypt potomny zawiesiłby się (
kill -s STOP $$
), a skrypt nadrzędny wysłałbyCONT
do niego sygnał, gdy będzie mógł kontynuować.Daje to możliwość zaimplementowania pewnego rodzaju synchronizacji między procesem nadrzędnym a procesem potomnym (choć bardzo podstawowy, ponieważ proces powłoki rodzicielskiej mniej więcej musi zgadywać, że proces potomny jest zawieszony, chociaż można to naprawić poprzez posiadanie potomka pułapki
CONT
i nie zawieszaj się, jeśli sygnał ten zostanie odebrany zbyt wcześnie).źródło