Jaka jest różnica między pracą a procesem?

Odpowiedzi:

46

Proces to dowolny działający program z własną przestrzenią adresową.

Zadanie jest pojęciem używanym przez powłokę - każdy program, który uruchamiasz interaktywnie, który się nie odłącza (tj. Nie jest demonem), jest zadaniem. Jeśli prowadzisz program interaktywny, możesz nacisnąć, CtrlZaby go zawiesić. Następnie możesz uruchomić go ponownie na pierwszym planie (używając fg) lub w tle (używając bg).

Gdy program jest zawieszony lub działa w tle, możesz uruchomić inny program - wtedy uruchomione byłyby dwa zadania. Można również uruchomić uruchomionego programu w tle przez nadanie „&” tak: program &. Ten program stałby się pracą w tle. Aby wyświetlić listę wszystkich uruchomionych zadań, możesz użyć jobs.

Aby uzyskać więcej informacji na temat zadań, zobacz tę sekcję strony podręcznika bash.

Shawn J. Goff
źródło
W powyższym przykładzie, gdy mamy uruchomione 2 zadania, mamy również uruchomione 2 procesy , prawda? Czy mógłbyś rozwinąć znaczenie własnej przestrzeni adresowej ? W którym przypadku program nie ma własnej przestrzeni adresowej?
Kenny,
@Kenny tak, te zadania tro byłyby również procesami. W rzeczywistości każda praca jest procesem. Praca jest związana z twoją sesją. Każdy rozpoczęty proces, który nie odrywa się od twojego tty, jest zadaniem.
Shawn J. Goff,
@Kenny, jeśli chodzi o procesy, kiedy mówię program, to bardzo ogólna rzecz - zestaw uporządkowanych instrukcji do wykonania przez CPU. Jest to również nazywane zadaniem lub wątkiem wykonania. Proces może utworzyć inny wątek, który ma tę samą przestrzeń adresową.
Shawn J. Goff,
1
polecenia potokowe, takie jak in, ls | sortto zadanie, ale każde polecenie działa jako proces potomny innego procesu podpowłoki. To jest przykład zadania składającego się z wielu procesów. Jak twoja definicja zadania wyjaśnia, że ​​zadanie może składać się z wielu procesów?
Tim
30

UNIX ma osobne pojęcia „proces”, „grupa procesów” i „sesja”.

Każda powłoka, którą otrzymujesz podczas logowania, staje się liderem własnej nowej sesji i grupy procesów oraz ustawia kontrolną grupę procesów terminalu na siebie.

Powłoka tworzy grupę procesów w ramach bieżącej sesji dla każdego uruchamianego „zadania” i umieszcza każdy rozpoczęty proces w odpowiedniej grupie procesów. Na przykład ls | headjest potokiem dwóch procesów, które powłoka uważa za pojedyncze zadanie i będzie należeć do jednej, nowej grupy procesów.

Proces jest (zbiorem) wątkiem wykonania i innym kontekstem, takim jak przestrzeń adresowa i tabela deskryptorów plików. Proces może rozpocząć inne procesy; te nowe procesy będą należeć do tej samej grupy procesów co rodzic, chyba że zostaną podjęte inne działania. Każdy proces może mieć również „terminal kontrolny”, który zaczyna się tak samo jak jego rodzic.

Powłoka ma koncepcję zadań „pierwszego planu” i zadań „w tle”. Zadania na pierwszym planie to grupy procesów z kontrolą terminala, a zadania w tle to grupy procesów bez kontroli terminala.

Każdy terminal ma grupę procesów pierwszego planu. Podczas przenoszenia zadania na pierwszy plan powłoka ustawia go jako grupę procesów na pierwszym planie terminala; podczas umieszczania zadania w tle powłoka ustawia grupę procesów pierwszego planu terminala na inną grupę procesów lub samą siebie.

Procesy mogą odczytywać i zapisywać na terminalu sterującym, jeśli znajdują się w grupie procesów na pierwszym planie. W przeciwnym razie odbierają SIGTTINi SIGTTOUsygnalizują odpowiednio próby odczytu i zapisu na terminalu. Domyślnie sygnały te zawieszają proces, chociaż większość powłok maskuje się, SIGTTOUaby zadanie w tle mogło nieprzerwanie zapisywać na terminalu.

efemeryczny
źródło
1
Jest to dobry, zwięzły przegląd zarządzania procesami powłoki i terminali. Można to poprawić, wspominając, że „zadanie” to „potok”, który może być więcej niż jednym procesem połączonym razem w grupie procesów.
Chris Page
1

W informatyce zadanie jest jednostką pracy lub jednostką wykonania (która wykonuje tę pracę). Składnik zadania (jako jednostka pracy) nazywa się zadaniem lub krokiem (jeśli jest sekwencyjny, jak w strumieniu zadania). Jako jednostka wykonania zadanie może być konkretnie utożsamiane z jednym procesem, który z kolei może mieć podprocesy (procesy potomne; proces odpowiadający zadaniu jest procesem nadrzędnym), które wykonują zadania lub kroki obejmujące pracę praca; lub z grupą procesów; lub z abstrakcyjnym odniesieniem do procesu lub grupy procesów, jak w kontroli zadań w systemie Unix.

Źródło

ładne przykłady

Premraj
źródło
-1

Powyższe definicje są bardzo techniczne, ale być może operatorzy chcieli więcej codziennych wyjaśnień. Myślę, że praca jest zaplanowanym procesem. Kiedy ogólnie zajmujemy się procesami, niekoniecznie istnieje pojęcie harmonogramu, ale kiedy używamy słowa „praca”, zawsze mamy na myśli, że jest on zaplanowany lub powtarzalny jak pętla, to jest jak pracownik.

Eloone
źródło
1
Wyjaśnij liczbę głosów oddanych, jeśli chcesz oddać głos. Jeśli ta odpowiedź jest nieprawidłowa, przynajmniej wyjaśnij, dlaczego uważasz, że jest niepoprawna. Do tej pory nadal uważam, że moja odpowiedź ma sens, jest to rodzaj wyjaśnienia, którego szukałem.
eloone
Zgadzam się, że ten, kto zagłosował, powinien był wyjaśnić, dlaczego. Ale myślę, że powodem odrzucenia jest to, że twoja definicja „pracy” jest po prostu nieprawidłowa.
prograde
Chcesz wyjaśnić, dlaczego to nie jest poprawne? „Zadanie” nie jest jasno zdefiniowane jak „proces” (z PID w systemie). Z mojego doświadczenia wynika, że ​​„praca” była zawsze słowem używanym do zdefiniowania pewnego rodzaju procesu, który był często planowany, w tle i który można uruchomić. Dlatego trudno to zdefiniować, ponieważ definiuje to użycie. Może to być także grupa procesów, ale podobnie jest z „kontenerem” (LXC), ale „kontener” nie jest „zadaniem”. Uruchomiony proces, taki jak „nginx”, również nie jest „zadaniem”. Mój komentarz wciąż dodaje coś do odpowiedzi. Znów odpowiada na to, co próbowałem zrozumieć.
eloone
Nadal szukam odpowiedniej definicji, więc przepraszam, nie mogę (jeszcze) odpowiedzieć. Ale to, co nie jest poprawne, to to, że trzeba by to zaplanować.
prograde