Korzystam z aplikacji, która odbiera pakiety TCP i UDP i dlatego nie można jej zawiesić. Celowo uruchomiłem 3 procesy tej samej aplikacji, z różnymi argumentami, w trybie tła za pomocą &
. Gdy tylko to zrobiłem $fg
, wszystkie trzy procesy weszły na pierwszy plan. Teraz chcę wysłać je ponownie w tło, ale bez zawieszenia. Jak mogę to zrobić?
11
Odpowiedzi:
Po pierwsze: na pierwszym planie może być tylko jeden proces, a nie wszystkie trzy.
fg
przenosi najnowszy proces na pierwszy plan. Aby proces Ctrl+ z, następnie pisanie byłobg
szybsze, aby nie „zakłócać” danej aplikacji (zauważ, że planista procesu i tak zrobi to wiele razy na sekundę), znajdź PID procesu na pierwszym planie, a następnie na drugim terminalu / Sesja SSH, użyjTwój oryginalny terminal powie
stopped
, ale ponieważ wysłałeśSIGCONT
od razu, proces będzie nadal działał w tle.źródło
Jeśli naprawdę masz zadanie na pierwszym planie, bash czeka na jego zakończenie, to mniej więcej definicja zadania na pierwszym planie . Jeśli bash nadal ma kontrolę nad terminalem, sprawdź, co się dzieje
jobs -l
, np .:Zacząłem trzy tła
ncat
procesy nasłuchiwania w . Możesz także zobaczyć „Gotowe” lub „Zatrzymane” dla statusu zadania.Możesz efektywnie ustawić tło zadania pierwszego planu z innej powłoki, używając metody SIGSTOP / SIGCONT Stefana Seidela (chociaż faktyczny sygnał wysyłany przez powłokę z Ctrl- Zto SIGTSTP, oba sygnały powinny działać).
Istnieje subtelne rozróżnienie między procesami i zadaniami, gdy używane są terminy pierwszy plan i tło. Istnieje tylko jedno zadanie na pierwszym planie powłoki , może istnieć wiele procesów na pierwszym planie (jest to związane z identyfikatorami grup procesów terminalowych i można je zaobserwować po uruchomieniu dwóch lub więcej procesów w potoku).
Działające procesy lub potok pod kontrolą powłoki są nazywane „zadaniem”, gdy używasz polecenia
bg
lubfg
, domyślnie odwołujesz się do ostatniego zadania - w moim przypadku tego z+
powyższym. Te zadania można również (między innymi) jawnie nazwać % 1% 2 lub% 3 (liczba w[]
).Niewykwalifikowane
fg
polecenie wpłynie tylko na jedno zadanie, ostatnie, więc możesz się mylić, rozumiejąc obecną sytuację. Zadanie w tle może nadal zapisywać w terminalu:Może to zależeć od tego, jak program obsługuje terminal,
ncat
działa dobrze do pisania. Podczas czytania programy zatrzymają się, a zobaczysz komunikat „Zatrzymano”. Powłoka uruchomi procesy i zaczeka, aż wyjdą lub otrzymają sygnał SIGTTIN (jak na razienohup
jest to obejściedisown
).Możesz ustawić tło określonego zatrzymanego zadania w tle
(w moim przypadku otrzymam błąd
bash: bg: job 3 already in background
)W przeciwnym razie, jeśli proces jest na pierwszym planie, chyba że program złapie SIGTSTP i zrobi coś specjalnego, prawdopodobnie nie będzie miał problemów z szybkim Ctrl- Zi
bg
. Pod tym względem nie ma nic specjalnego w programach sieciowych, połączenia przychodzące / dane będą buforowane przez jądro (do pewnego momentu). Połączenie strumieniowe może jednak mieć zauważalną pauzę.Aby uzyskać więcej informacji, zobacz sekcję „ KONTROLA ZADAŃ ” na stronie podręcznika bash.
źródło
Najłatwiejszym sposobem na to jest skorzystanie z programu ekranowego . Możesz uruchomić aplikację w wirtualnym terminalu, a następnie wyjść z ekranu za pomocą Ctrl + A, D. Jeśli chcesz wznowić sesję, wpisz swój typ
screen -x
. Jeśli masz wiele procesów, zostanie wyświetlona lista ekranów do ponownego podłączenia. Aby uzyskać więcej informacji, przeczytaj stronę man screen .źródło