OnWorks Linux i Windows Online WorkStation

logo

Darmowy hosting online dla stacji roboczych

<Poprzedni | Spis treści | Następne>

Połączenia -u i -a Opcje dostarczają dodatkowych informacji. Więcej opcji i ich działanie można znaleźć na stronach informacyjnych.


W następnej sekcji zobaczymy, jak jeden proces może stworzyć inny.


obraz

4.1.5. Życie i śmierć procesu


4.1.5.1. Tworzenie procesu


Nowy proces jest tworzony, ponieważ istniejący proces tworzy dokładną kopię samego siebie. Ten proces potomny ma to samo środowisko co jego rodzic, różni się jedynie numerem identyfikacyjnym procesu. Ta procedura nazywa się rozwidlenie.


Po rozwidleniu procesu przestrzeń adresowa procesu potomnego zostaje nadpisana nowymi danymi procesu. Odbywa się to poprzez exec zadzwoń do systemu.


Połączenia rozwidlenie i wykonanie mechanizm zamienia w ten sposób stare polecenie na nowe, podczas gdy środowisko, w którym wykonywany jest nowy program, pozostaje takie samo, włączając konfigurację urządzeń wejściowych i wyjściowych, zmienne środowiskowe i priorytet. Mechanizm ten służy do tworzenia wszystkich procesów UNIXowych, zatem dotyczy także systemu operacyjnego Linux. Już pierwszy proces startowych, z identyfikatorem procesu 1, jest rozwidlany podczas procedury rozruchu w pliku

Tzw ładowanie procedura.


Ten schemat ilustruje mechanizm fork-and-exec. Identyfikator procesu zmienia się po procedurze fork:


Rysunek 4-1. Mechanizm fork-and-exec


obraz


Jest kilka przypadków, w których startowych staje się rodzicem procesu, podczas gdy proces nie został uruchomiony przez startowychjak już widzieliśmy w pstree przykład. Wiele programów np. demonizować ich procesy podrzędne, dzięki czemu mogą kontynuować działanie, gdy element nadrzędny zatrzymuje się lub jest zatrzymywany. Typowym przykładem jest menedżer okien; zaczyna się xterm proces generujący powłokę przyjmującą polecenia. Następnie menedżer okien zaprzecza dalszej odpowiedzialności i przekazuje proces potomny startowych. Dzięki temu mechanizmowi możliwa jest zmiana menedżerów okien bez przerywania uruchomionych aplikacji.


Od czasu do czasu coś idzie nie tak, nawet w dobrych rodzinach. W wyjątkowym przypadku proces może się zakończyć, podczas gdy rodzic nie czeka na zakończenie tego procesu. Taki niepogrzebany proces nazywa się a zambi proces.


obraz

4.1.5.2. Zakończenie procesów


Kiedy proces kończy się normalnie (nie zostaje zabity lub w inny sposób nieoczekiwanie przerwany), program zwraca swój stan wyjścia do rodzica. Ten status wyjścia jest liczbą zwróconą przez program podającą wyniki wykonania programu. System zwracania informacji po wykonaniu zadania ma swoje korzenie w języku programowania C, w którym napisano UNIX.


Kody powrotne mogą być następnie interpretowane przez rodzica lub w skryptach. Wartości kodów powrotnych są specyficzne dla programu. Informacje te można zwykle znaleźć na stronach podręcznika określonego programu, na przykład w pliku grep polecenie powraca -1 jeśli nie zostaną znalezione żadne dopasowania, po czym może zostać wydrukowany komunikat w rodzaju „Nie znaleziono plików”. Innym przykładem jest wbudowane polecenie Bash prawdziwy, który nie robi nic poza zwróceniem statusu wyjścia równego 0, co oznacza sukces.


obraz


4.1.5.3. Sygnały


Procesy kończą się, ponieważ otrzymują sygnał. Istnieje wiele sygnałów, które można wysłać do procesu. Użyj zabić polecenie wysłania sygnału do procesu. Komenda zabić -l pokazuje listę sygnałów. Większość sygnałów jest przeznaczona do użytku wewnętrznego systemu lub dla programistów podczas pisania kodu. Jako użytkownik będziesz potrzebować następujących sygnałów:


Tabela 4-2. Wspólne sygnały


Nazwa sygnału

Numer sygnału

Znaczenie

SIGTERM

15

Zakończ proces w uporządkowany sposób.

SIGINT

2

Przerwij proces. Proces może zignorować ten sygnał.

SIGKILL

9

Przerwij proces. Proces nie może zignorować tego sygnału.

ZGŁOSZENIE

1

W przypadku demonów: ponownie przeczytaj plik konfiguracyjny.

Więcej o domyślnych akcjach podejmowanych podczas wysyłania sygnału do procesu możesz przeczytać w mężczyzna 7 sygnał.


obraz

4.1.6. SUID i SGID


Zgodnie z obietnicą z poprzedniego rozdziału, teraz omówimy bardziej szczegółowo tryby specjalne SUID i SGID. Tryby te istnieją, aby zapewnić zwykłym użytkownikom możliwość wykonywania zadań, których normalnie nie byliby w stanie wykonać ze względu na schemat ograniczonych uprawnień do plików stosowany w systemach opartych na systemie UNIX. W idealnej sytuacji tryby specjalne są używane tak rzadko, jak to możliwe, ponieważ wiążą się z zagrożeniami bezpieczeństwa. Twórcy Linuksa na ogół starali się ich unikać w jak największym stopniu. Linux ps wersja korzysta na przykład z informacji przechowywanych w pliku / proc system plików, który jest dostępny dla każdego, unikając w ten sposób ujawniania wrażliwych danych i zasobów systemowych ogółowi społeczeństwa. Wcześniej, nadal w starszych systemach UNIX, plik ps program potrzebował dostępu do plików takich jak / dev / mem i / dev / kmem, który miał wady ze względu na uprawnienia i prawa własności do tych plików:


Rita:~> ls

crw-r-----

-l

/dev/*pamięć

Korzeń 1


km em


1,


2 30 sierpnia 22:30 /dev/kmem

crw-r-----

Korzeń 1

km em

1,

1 30 sierpnia 22:30 /dev/mem

Ze starszymi wersjami ps, nie można było uruchomić programu jako zwykły użytkownik, chyba że zastosowano do niego specjalne tryby.


obraz

Chociaż generalnie staramy się unikać stosowania jakichkolwiek specjalnych trybów, czasami konieczne jest użycie SUID. Przykładem jest mechanizm zmiany haseł. Oczywiście użytkownicy będą chcieli to zrobić sami, zamiast zlecać administratorowi systemu ustawianie hasła. Jak wiemy, nazwy użytkowników i hasła są wymienione w pliku / Etc / passwd plik, który ma następujące uprawnienia dostępu i właścicieli:


bea:~> ls -l /etc/passwd

-rw-r--r-- 1 korzeń główny

1267 16 stycznia 14:43 /etc/passwd

bea:~> ls -l /etc/passwd

-rw-r--r-- 1 korzeń główny

Mimo to użytkownicy muszą mieć możliwość zmiany własnych informacji w tym pliku. Osiąga się to poprzez nadanie passwd

specjalne uprawnienia programu:


mia:~> które hasło

passwd to /usr/bin/passwd

mia:~> które hasło

passwd to /usr/bin/passwd


mia:~> ls -l / usr / bin / passwd

-rs--x--x 1 korzeń główny

13476 7 sierpnia 06:03 /usr/bin/passwd*

mia:~> ls -l / usr / bin / passwd

-rs--x--x 1 korzeń główny

obraz

Kiedy zostanie wezwany, passwd polecenie zostanie uruchomione przy użyciu uprawnień dostępu korzeń, umożliwiając w ten sposób zwykłemu użytkownikowi edycję pliku haseł, którego właścicielem jest administrator systemu.


Tryby SGID w pliku nie występują tak często jak SUID, ponieważ SGID często wiąże się z tworzeniem dodatkowych grup. W niektórych przypadkach jednak musimy pokonać ten trud, aby zbudować eleganckie rozwiązanie (nie przejmuj się tym zbytnio - niezbędne grupy zwykle tworzone są podczas instalacji). Tak jest w przypadku napisać i Ściana programy służące do wysyłania wiadomości do terminali innych użytkowników (ttys). The napisać polecenie zapisuje wiadomość do pojedynczego użytkownika, podczas gdy Ściana pisze do wszystkich podłączonych użytkowników.


Wysyłanie tekstu do terminala lub wyświetlacza graficznego innego użytkownika jest zwykle niedozwolone. Aby obejść ten problem, utworzono grupę, do której należą wszystkie urządzenia końcowe. Kiedy napisać i Ściana komendy otrzymają uprawnienia SGID, komendy będą uruchamiane z prawami dostępu obowiązującymi dla tej grupy, tty w przykładzie. Ponieważ ta grupa ma uprawnienia do zapisu na terminalu docelowym, także użytkownik nie mający żadnych uprawnień do korzystania z tego terminala może wysyłać do niego wiadomości.


obraz

W poniższym przykładzie użytkownik joe najpierw dowiaduje się, do którego terminala podłączony jest jego korespondent, korzystając z opcji którzy testują i oceniają narzędzia, przedstawiając swoje potrzeby i wyzwania w kontekście stosowanych narzędzi Komenda. Następnie wysyła jej wiadomość za pomocą napisać Komenda. Zilustrowano także prawa dostępu na stronie napisać programu i na terminalach zajmowanych przez użytkownika odbierającego: jasne jest, że inni niż właściciel użytkownika nie mają żadnych uprawnień na urządzeniu, z wyjątkiem właściciela grupy, który może na nim pisać.


Joe: ~> które piszą

write to /usr/bin/write


Joe: ~> ls -l /usr/bin/write

-rwxr-sr-x 1 główny tty

8744 5 grudnia 00:55 /usr/bin/write*

Joe: ~> które piszą

write to /usr/bin/write


Joe: ~> ls -l /usr/bin/write

-rwxr-sr-x 1 główny tty


Joe: ~> którzy testują i oceniają narzędzia, przedstawiając swoje potrzeby i wyzwania w kontekście stosowanych narzędzi

Jenny Tty1

Jenny pkt/1

Jenny pkt/2

Jenny pkt/3

joe pkt/0

23 stycznia 11:41

23 stycznia 12:21 (:0)

23 stycznia 12:22 (:0)

23 stycznia 12:22 (:0)

20 stycznia 10:13 (lo.callhost.org)

Joe: ~> którzy testują i oceniają narzędzia, przedstawiając swoje potrzeby i wyzwania w kontekście stosowanych narzędzi

Jenny Tty1

Jenny pkt/1

Jenny pkt/2

Jenny pkt/3

joe pkt/0


Joe: ~> ls -l /dev/tty1

crw--w---- 1 Jenny Tty 4,

1 23 stycznia 11:41 /dev/tty1

Joe: ~> ls -l /dev/tty1

crw--w---- 1 Jenny Tty 4,


Joe: ~> napisz Jenny TTY1

hej Jenny, zjemy razem lunch?

^C

Joe: ~> napisz Jenny TTY1

hej Jenny, zjemy razem lunch?

^C

Użytkownik przędzarka dostaje to na swoim ekranie:


Wiadomość od [email chroniony] na ptys/1 o 12:36 ... hej Jenny, zjemy razem lunch?

EOF

Wiadomość od [email chroniony] na ptys/1 o 12:36 ... hej Jenny, zjemy razem lunch?

EOF

Po odebraniu wiadomości terminal można wyczyścić za pomocą przycisku Ctrl+L kombinacja klawiszy. Aby w ogóle nie otrzymywać wiadomości (z wyjątkiem od administratora systemu), użyj opcji wiadomość Komenda. Aby zobaczyć, którzy podłączeni użytkownicy akceptują wiadomości od innych, użyj którzy testują i oceniają narzędzia, przedstawiając swoje potrzeby i wyzwania w kontekście stosowanych narzędzi -w. Wszystkie funkcje są w pełni wyjaśnione na stronach informacyjnych każdego polecenia.


obrazNazwy grup mogą się różnić

Schemat grupowy jest specyficzny dla dystrybucji. Inne dystrybucje mogą używać innych nazw lub innych rozwiązań.


obraz


Najlepsze przetwarzanie w chmurze dla systemu operacyjnego w OnWorks: