co to jest proces w tle?

Oto powszechna definicja procesu w tle:

„Proces w tle to program, który działa bez udziału użytkownika. wiele procesów w tle może działać w wielozadaniowym systemie operacyjnym, takim jak Linux, podczas gdy użytkownik wchodzi w interakcję z procesem pierwszoplanowym Niektóre procesy w tle, takie jak na przykład demony, nigdy nie wymagają interwencji użytkownika. Inne są tylko tymczasowo w tle, podczas gdy użytkownik jest zajęty programem działającym obecnie na pierwszym planie. Tak więc inny proces może spać i zajmować przestrzeń wymiany, dopóki nie zostanie aktywowany, co sprawia, że obecnie jest procesem w tle. ”

Biorąc pod uwagę tę definicję, czy nie uczyniłoby procesu takiego jak Apache2 procesem działającym w tle, ponieważ nigdy nie wchodzi w interakcję z danymi wejściowymi użytkownika w terminalu? I czy nie uwzględniałoby to większości procesów w tle, ponieważ większość procesów działających w systemie nie obsługuje danych wejściowych użytkownika w terminalu? Co dziwne, osobiście nie uważałbym Apache2 za proces działający w tle, ponieważ użytkownik wchodzi z nim w interakcję za pośrednictwem żądań http (tylko nie przez terminal).

Komentarze

  • Myślę, że są tu dwie definicje. Jedna dotyczy danych wejściowych użytkownika (czy proces może akceptować dane wejściowe użytkownika, na przykład terminal). Druga dotyczy tego, czy proces śpi i siedzi w przestrzeni wymiany, czy nie. Tutaj możesz nazywaj oba te procesy jako procesy w tle, co sprawia, że termin jest mylący

Odpowiedź

Proces pierwszoplanowy nie wymagają interakcji użytkownika. Możesz to zrobić

cp very_large_file destination 

, a to zablokowałoby twój terminal do czasu zakończenia kopiowania i zostałoby uznane za proces pierwszoplanowy bez interakcji użytkownika. Punkt tutaj jest to, czy proces blokuje wykonywanie innych procesów aż do ich zakończenia.

Na dwa sposoby możesz zrobić proces pierwszoplanowy w tło:

1- Dodanie znaku ampersand ( & ) na końcu wiersza poleceń:

cp very_large_file destination & 

2- Zatrzymanie procesu pierwszego planu i przeniesienie go na tło:

cp very_large_file destination 

CTRL + Z

bg 

Teraz apache2 z pewnością liczy się jako proces w tle: tak, możesz wchodzić z nim w interakcję za pośrednictwem żądań http, ale po prostu nasłuchuje na porcie 80 (domyślnie), czekając na takie żądanie: nie blokuje systemu, dopóki użytkownik nie złoży żądania.

I dlaczego bierzesz pod uwagę większość procesów uznawanych za procesy w tle? Jest to rzeczywiście normalne w „wielozadaniowym systemie operacyjnym”.

Komentarze

  • Z ciekawości, jeśli mam program, który blokuje, ale działa w sesji ekranu GNU lub tmux, a następnie zostawiam tę sesję screen / tmux i zwracam sterowanie do terminala (ale oczywiście ignorują sygnał HUP (rozłączenia), więc nadal działają), czy byłyby uważane za tło proces? Myślę, że można by argumentować, że są to procesy pierwszoplanowe, ponieważ w ramach swojej sesji blokują się, mimo że nie blokują się w głównym terminalu.
  • @JohnMerlino Powiedziałbym, że screen / tmux jest procesem pierwszoplanowym w tym przypadku, a kiedy " zwracasz sterowanie do terminala " wysyłasz go w tło.

Odpowiedź

Istnieją dwie popularne definicje „Proces w tle”, jeden w kategoriach ogólnych, a drugi dokładny i specyficzny dla systemu UNIX.

W szerokim znaczeniu „proces w tle” można nazwać dowolnym procesem, który nie wchodzi w interakcję z użytkownikiem siedzącym na konsola. W tym sensie Apache jest procesem w tle.

W terminologii unixowej „proces w tle” ma precyzyjną definicję. proces w tle to proces, który jest uruchamiany z terminala, ale obecnie nie ma możliwości interakcji z nim minal. (Upraszczam, nie biorąc pod uwagę grup procesów). Proces w tle zazwyczaj uzyskuje się, uruchamiając zadanie w tle w powłoce:

$ myprogram & [1] 12345 $ 

lub uruchamiając program, a następnie zawieszenie go i pozwolenie na kontynuację w tle:

$ myprogram ^Z [1]+ Stopped myprogram $ bg [1]+ myprogram & $ 

Jeśli uruchomisz program bez & , jest na pierwszym planie. W danym momencie może istnieć tylko jeden proces na pierwszym planie w danym terminalu . (Lub bardziej ogólnie, pojedyncza grupa procesów, jeśli proces pierwszoplanowy uruchamia pewne podprocesy.) Wbudowane polecenia powłoki bg i fg zmieniają, który proces jest na pierwszym planie. Gdy proces jest w tle, jeśli próbuje odczytać lub zapisać do terminala, jest zatrzymany przez sygnał SIGTTIN lub SIGTTOUT .

Uważam, że twoja intuicja, że Apache nie jest procesem w tle, ponieważ współdziała z użytkownikiem przez HTTP, jest dziwna. Apache nie wchodzi w interakcję z użytkownikiem: jest to interakcja ze zdalną przeglądarką internetową (która oddziałuje z użytkownikiem) lub zautomatyzowanym klientem (który nie wchodzi w interakcję z użytkownikiem). Jeśli uważasz, że jakikolwiek proces, który „wchodzi w interakcję z procesem interaktywnym, jest procesem interaktywnym, to każdy proces jest interaktywny, co czyni go bezużytecznym pojęciem.

Definicja, którą cytujesz, łączy procesy w tle z procesami bezczynnymi. Nie ma powodu, dla którego proces w tle miałby być uśpiony lub zamieniony bardziej niż proces pierwszoplanowy. Na przykład proces w tle może wykonywać ciężkie obliczenia. I odwrotnie, jeśli użytkownik odejdzie od konsoli i istnieją inne aktywne procesy, procesy pierwszoplanowe mogą zostać zamienione.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *