Narzędzia użytkownika

Narzędzia witryny


so:ps_kill

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
so:ps_kill [2023/03/20 13:16]
jkonczak [Spanie, mierzenie i limitowanie czasu]
so:ps_kill [2026/03/24 19:08] (aktualna)
jkonczak
Linia 1: Linia 1:
 ===== Spanie, mierzenie i limitowanie czasu ===== ===== Spanie, mierzenie i limitowanie czasu =====
  
-Komenda ''​sleep //​czas//''​ śpi podany czas.+Komenda ''​sleep //​czas//''​ śpi podany ​(w sekundach) ​czas.
 \\ \\
-Domyślną jednostką ​czasu są sekundy (''​s''​)ale można podać też ''​m'',​ ''​h''​ i ''​d''​. ​+<​small>​ 
 +Duża część implementacji wspiera podawanie czasu z jednostką ​''​s'',​ ''​m'',​ ''​h''​ i ''​d'',​ 
 +jak również słowo kluczowe ''​infinity''​.
 \\ \\
-<​small>​''​sleep 1d''​ jest równoważne ''​sleep 24h''​ i ''​sleep 1440m''​ i ''​sleep 86400[s]''​.+''​sleep 1d''​ jest równoważne ''​sleep 24h''​ i ''​sleep 1440m''​ i ''​sleep 86400[s]''​
 +Interwały można łączyć, np. ''​sleep 1m 30s''​ poczeka 90 sekund.
 \\ \\
-Niektóre implementacje sleep rozumieją ułamki dziesiętne,​ np. ''​sleep 0.05m''​ będzie spać 3s.</​small>​+Niektóre implementacje ​''​sleep'' ​rozumieją ułamki dziesiętne,​ np. ''​sleep 0.05m''​ będzie spać 3s.</​small>​
  
 Komenda ''​time //​polecenie//​ [//​argumenty//​]...''​ uruchamiana podane polecenie z argumentami i mierzy czas jego wykonania. Komenda ''​time //​polecenie//​ [//​argumenty//​]...''​ uruchamiana podane polecenie z argumentami i mierzy czas jego wykonania.
 +\\
 +Komenda ''​time''​ jest zwykle wbudowana w powłokę, stąd opisu jej działania należy
 +szukać w dokumentacji powłoki.
 +\\
 +<​small>​
 +Implementacja GNU time (często obecna w dystrybucjach Linuksa jako ''/​usr/​bin/​time''​)
 +dodatkowo podaje zużycie pamięci i ilość operacji I/O.
 +</​small>​
  
 <​small>​ <​small>​
Linia 22: Linia 33:
 <​small>​ <​small>​
 ~~Zadanie.#​~~ Zmierz ile czasu trwa wykonanie komendy: ~~Zadanie.#​~~ Zmierz ile czasu trwa wykonanie komendy:
 +<​html><​div style="​margin-top:​-1.2em"></​div></​html>​
   * ''​openssl dhparam -text 1536''​   * ''​openssl dhparam -text 1536''​
   * ''​dd if=/​dev/​zero of=/​dev/​null bs=1 count=2M''​   * ''​dd if=/​dev/​zero of=/​dev/​null bs=1 count=2M''​
Linia 41: Linia 53:
  
 Na proces poza sekwencją instrukcji (załadowaną do pamięci operacyjnej) składa Na proces poza sekwencją instrukcji (załadowaną do pamięci operacyjnej) składa
-się wszystko co opisuje stan jego wykonania – np. zawartość rejestrów procesora, +się wszystko co opisuje stan jego wykonania – np. zawartość rejestrów procesora ​(w 
-stan pamięci operacyjnej.+tym informacja którą instrukcję programu jako kolejną wykona proces), ​stan pamięci 
 +operacyjnej ​(w tym stos wywołań i wartości zmiennych), czy lista otwartych plików 
 +i połączeń sieciowych.
  
 Uruchamiając ten sam program (tą samą aplikację) wielokrotnie tworzy się wiele Uruchamiając ten sam program (tą samą aplikację) wielokrotnie tworzy się wiele
Linia 52: Linia 66:
 proces <​small>​(poza pierwszym procesem, o identyfikatorze 1, zwanym proces <​small>​(poza pierwszym procesem, o identyfikatorze 1, zwanym
 [[https://​en.wikipedia.org/​wiki/​Init|init]],​ uruchamianym przez jądro systemu [[https://​en.wikipedia.org/​wiki/​Init|init]],​ uruchamianym przez jądro systemu
-operacyjnego przy starcie</​small>​.+operacyjnego przy starcie)</​small>​.
  
 Określenie **procesy potomne** procesu //x// (//child processes//​) opisuje procesy Określenie **procesy potomne** procesu //x// (//child processes//​) opisuje procesy
Linia 59: Linia 73:
 **Rodzic** (//parent process//) procesu //x// to proces który uruchomił //x//. **Rodzic** (//parent process//) procesu //x// to proces który uruchomił //x//.
  
-Procesy są identyfikowane przez **pid** (//process identifier//​).+Procesy są identyfikowane przez (numeryczny) ​**pid** (//process identifier//​).
 \\ \\
 Dla każdego procesu utrzymywany jest identyfikator rodzica – **ppid** (//parent pid//). Dla każdego procesu utrzymywany jest identyfikator rodzica – **ppid** (//parent pid//).
Linia 65: Linia 79:
 Kiedy kończy się proces potomny, system operacyjny utrzymuje proces do czasu aż Kiedy kończy się proces potomny, system operacyjny utrzymuje proces do czasu aż
 jego wartość wyjściowa zostanie zebrana (//reap//) przez rodzica. jego wartość wyjściowa zostanie zebrana (//reap//) przez rodzica.
 +<​small>​Zauważ że np. w C kończysz program przez ''​return 0;''​ z funkcji ''​main''​
 +lub przez ''​exit(0)''​ – właśnie to 0 (czy inna wartość) to wartość wyjściowa.</​small>​
 \\ \\
 Proces który się zakończył,​ ale jego wartość nie została zebrana przez rodzica, Proces który się zakończył,​ ale jego wartość nie została zebrana przez rodzica,
Linia 91: Linia 107:
 Wybór użytecznych opcji dla ''​ps'':​ Wybór użytecznych opcji dla ''​ps'':​
   * ''​-e''​ wybiera wszystkie procesy w systemie   * ''​-e''​ wybiera wszystkie procesy w systemie
-  * ''​-l|-f|-F''​ wybiera długi, pełny lub ekstra pełny format wyjścia +  * ''​-l'',​ ''​-f''​ albo <​small>''​-F''​</​small> ​wybiera długi, pełny lub <​small>​ekstra pełny</​small> ​format wyjścia 
-  * ''​-L|-T''​ pokazuje wątki+  * ''​-L''​ albo ''​-T''​ pokazuje wątki
   * <​small>''​-H''​ sortuje hierarchicznie i rysuje (wcięciami w polu komenda) dzieci</​small>​   * <​small>''​-H''​ sortuje hierarchicznie i rysuje (wcięciami w polu komenda) dzieci</​small>​
 +<​html><​div style="​margin-top:​-1.4em"></​div></​html>​
 +<​small>​Opcje ''​-F'',​ ''​-L'',​ ''​-T''​ oraz ''​-H''​ nie są w standardzie POSIX (są specyficzne dla Linuksa).</​small>​
 +
  
 <​small>​ <​small>​
Linia 110: Linia 129:
  
 ~~Zadanie.#​~~ Wyświetl listę wszystkich procesów i wątków w systemie. Znajdź na niej dwa wątki tego samego procesu. ~~Zadanie.#​~~ Wyświetl listę wszystkich procesów i wątków w systemie. Znajdź na niej dwa wątki tego samego procesu.
 +
 +<​small>​
 +~~Zadanie.#​~~ Uruchom polecenie
 +''​%%python3 -c '​import os; print(os.popen("/​usr/​bin/​uname -a"​).readline(),​end=""​);​ os.read(0,​1)'​%%''​
 +które "​wyprodukuje"​ proces zombie i zatrzyma się oczekując na wpisanie danych z klawiatury.
 +W kolejnym terminalu znajdź ten proces zombie na liście procesów.
 +</​small>​
  
 Lista procesów w formie drzewa może być wyświetlona komendą **''​pstree''​**. Lista procesów w formie drzewa może być wyświetlona komendą **''​pstree''​**.
 \\ \\
-W ''​pstree''​ przełącznik ''​-p''​ dodaje pidy, ''​-u''​ użytkownika,​ a ''​a''​+W ''​pstree''​ przełącznik ''​-p''​ dodaje pidy, ''​-u''​ użytkownika,​ a ''​-a''​
 pokazuje argumenty z jakimi został uruchomiony proces. pokazuje argumenty z jakimi został uruchomiony proces.
  
Linia 120: Linia 146:
 ~~Zadanie.#​~~ Wyświetl drzewo procesów z pidem każdego procesu. ~~Zadanie.#​~~ Wyświetl drzewo procesów z pidem każdego procesu.
  
-Pseudo ​system plików ''​procfs'',​ zamontowany standardowo w ''/​proc'', ​pozwala +++++Przykłady - listowanie procesów|{{page>​so:​ps_kill:​examples#​ps_pstree&​inline&​noheader}}++++ 
-odczytać informacje o procesach przez dostęp do plików.+++++Przykłady - procesy zombie|{{page>​so:​ps_kill:​examples#​zombie&​inline&​noheader}}++++ 
 + 
 +W Linuksie pseudo ​system plików ''​procfs'',​ zamontowany standardowo w ''/​proc'',​ 
 +pozwala ​odczytać informacje o procesach przez dostęp do plików.
 Katalog ''/​proc/​self''​ zawiera szczegółowe informacje o procesie który próbuje Katalog ''/​proc/​self''​ zawiera szczegółowe informacje o procesie który próbuje
 je przeczytać. je przeczytać.
 \\ \\
-W ''​man 5 proc''​ znajdziesz szczegółowe informacje.+W ''​man 5 proc''​ znajdziesz ​skrótowe informacje o ''​procfs'',​ a w  
 +[[https://​docs.kernel.org/​filesystems/​proc.html#​process-specific-subdirectories|dokumentacji jądra]] 
 +szczegóły.
  
 ~~Zadanie.#​~~ Wyświetl zawartość pliku ''/​proc/​self/​status''​. Informacje o jakim procesie zostały wyświetlone?​ ~~Zadanie.#​~~ Wyświetl zawartość pliku ''/​proc/​self/​status''​. Informacje o jakim procesie zostały wyświetlone?​
  
 <​small>​ <​small>​
-~~Zadanie.#​~~ Doczytaj w podręczniku ​i sprawdź co jeszcze jest w katalogach ''/​proc/​****//​pid//​****/''​.+~~Zadanie.#​~~ Doczytaj w dokumentacji ​i sprawdź co jeszcze jest w katalogach ''/​proc/​****//​pid//​****/''​.
  
 Określenie zużycia pamięci przez proces jest trudne.\\ Określenie zużycia pamięci przez proces jest trudne.\\
Linia 151: Linia 182:
 Ale co z swapem i [[https://​en.wikipedia.org/​wiki/​Zram|kompresją wewnątrz RAMu]]… Ale co z swapem i [[https://​en.wikipedia.org/​wiki/​Zram|kompresją wewnątrz RAMu]]…
  
-Zużycie pamięci próbuje sensownie pokazać program ''​smem'';​ sprawdź opcje ''​-p''​ i ''​-t''​.+Zużycie pamięci próbuje sensownie pokazać program ''​smem'';​ sprawdź opcje ''​-p''​ i ''​-t ​-k''​.
 </​small>​ </​small>​
  
Linia 185: Linia 216:
  
 Poza programem ''​htop'',​ istnieje wiele narzędzi wzorowanych na ''​top''​ pokazujących Poza programem ''​htop'',​ istnieje wiele narzędzi wzorowanych na ''​top''​ pokazujących
-stan systemu i procesów. Są to m. in.. ''​iotop''​ (użycie I/O), ''​atop'',​ ''​glances''​.+stan systemu i procesów. 
 +\\ 
 +Są to m. in.. ''​iotop''​ (użycie I/O), ''​atop'',​ ''​glances'',​ ''​btm''​(''​bottom''​),​ ''​btop''​.
 </​small>​ </​small>​
 +
 +++++Przykłady|<​asciicast so:​tops.cast 80>++++
  
 === Wyszukiwanie procesów === === Wyszukiwanie procesów ===
Linia 256: Linia 291:
 Sygnał można zapisać jako jego numer, np. ''​kill -3 //​pid//''​ lub nazwę, np. ''​kill -INT //​pid//''​ Sygnał można zapisać jako jego numer, np. ''​kill -3 //​pid//''​ lub nazwę, np. ''​kill -INT //​pid//''​
 \\ \\
-<​small>​Nazwy i numery sygnałów można sprawdzić komendą ''​kill -l''​ lub ''​kill -L''​.</​small>​+<​small>​Nazwy i numery sygnałów można sprawdzić komendą ''​kill -l'' ​(lub, w bashu, ​''​kill -L''​).</​small>​
 \\ \\
 Komenda ''​kill''​ przyjmuje tylko pid – numeryczny identyfikator procesu. Komenda ''​kill''​ przyjmuje tylko pid – numeryczny identyfikator procesu.
Linia 280: Linia 315:
 </​small>​ </​small>​
  
-~~Zadanie.#​~~ Uruchom program ''​mousepad''​. Wyślij do niego sygnał STOP. Sprawdź jak działa mousepad. Potem wyślij do niego sygnał CONT.+~~Zadanie.#​~~ Uruchom program ''​mousepad''​ lub ''​glxgears''​. Wyślij do niego sygnał STOP. Sprawdź jak działa mousepad. Potem wyślij do niego sygnał CONT.
  
 <​small>​ <​small>​
-~~Zadanie.#​~~ Uruchom w jednym terminalu komendą ''​named -g -c <​(:​)''​ serwer DNS. Z drugiego terminalu wyślij sygnał HUP do ''​named''​a.+~~Zadanie.#​~~ Uruchom w jednym terminalu komendą ''​/usr/sbin/named -g -c <​(:​)''​ serwer DNS. Z drugiego terminalu wyślij sygnał HUP do ''​named''​a.
 </​small>​ </​small>​
 +
 +++++Przykłady|<​asciicast so:​pkill.cast 81>++++
  
 ==== Kontrola zadań w powłoce ==== ==== Kontrola zadań w powłoce ====
Linia 297: Linia 334:
  
 Zwykle skrót **//​Ctrl+z//​** jest domyślnie skonfigurowany do wysłania sygnału Zwykle skrót **//​Ctrl+z//​** jest domyślnie skonfigurowany do wysłania sygnału
-STOP do bieżącego procesu.+TSTP (który nieobsłużony przez proces działa identycznie jak sygnał ​STOPdo 
 +bieżącego procesu.
  
 Listę zatrzymanych i działających w tle procesów powłoki (tzw. tablicę zadań) Listę zatrzymanych i działających w tle procesów powłoki (tzw. tablicę zadań)
Linia 329: Linia 367:
  
 ~~Zadanie.#​~~ Uruchom w tle ''​sleep 1h''​ oraz ''​sleep 15s''​. Poczekaj poleceniem ''​wait''​ na zakończenie drugiego ''​sleep''​a. ~~Zadanie.#​~~ Uruchom w tle ''​sleep 1h''​ oraz ''​sleep 15s''​. Poczekaj poleceniem ''​wait''​ na zakończenie drugiego ''​sleep''​a.
 +
 +++++Przykłady|<​asciicast so:​jobs.cast 80>++++
  
 ==== Proces a planiści ==== ==== Proces a planiści ====
Linia 373: Linia 413:
  
 </​small>​ </​small>​
 +
 +++++Przykłady|<​asciicast so:​niceness.cast 80>++++
  
 ~~Zadanie.#​~~ Uruchom komendę ''​sleep 1h''​ z niceness 10. Sprawdź jej nicneness (np. w ''​ps''​ / ''​htop''​). ~~Zadanie.#​~~ Uruchom komendę ''​sleep 1h''​ z niceness 10. Sprawdź jej nicneness (np. w ''​ps''​ / ''​htop''​).
Linia 379: Linia 421:
  
 ~~Zadanie.#​~~ W dwóch konsolach wykonaj ''​taskset -pc 0 $$''​ (<​small>​która zmieni listę dozwolonych procesorów tego shella na pierwszy</​small>​).\\ ~~Zadanie.#​~~ W dwóch konsolach wykonaj ''​taskset -pc 0 $$''​ (<​small>​która zmieni listę dozwolonych procesorów tego shella na pierwszy</​small>​).\\
-Następnie w obu wykonaj ''​openssl dhparam ​-text %%$((2**14))%% [//dowolny tekst//]''​+Następnie w jednym ​wykonaj ''​openssl dhparam ​9000'',​ w drugim ''​openssl dhparam 9001''​
 (<​small>​co uruchomi procesorożerne szukanie dużych liczb pierwszych</​small>​).\\ (<​small>​co uruchomi procesorożerne szukanie dużych liczb pierwszych</​small>​).\\
 W trzeciej konsoli uruchom ''​htop''​ i obserwuj zużycie CPU. \\ W trzeciej konsoli uruchom ''​htop''​ i obserwuj zużycie CPU. \\
Linia 419: Linia 461:
 na procesorach z węzła //x// i pamięci z węzła //y//. na procesorach z węzła //x// i pamięci z węzła //y//.
  
-</​small>​ 
- 
-===== Edycja linii poleceń ​ ===== 
- 
-Bash (i wiele innych programów) korzysta do odczytywania komend ze standardowego wejścia biblioteki [[https://​en.wikipedia.org/​wiki/​GNU_Readline|readline]]. 
-\\ 
-Część programów z przyczyn licencyjnych wybiera do tego samego celu [[https://​thrysoee.dk/​editline/​|libedit]]. 
- 
-Readline pozwala na wygodną edycję linii poleceń i tworzenie historii poleceń. 
- 
-Lista sensownych skrótów klawiszowych do edycji linii poleceń jest tutaj: https://​readline.kablamo.org/​emacs.html 
-\\ 
-Pełna lista komend i przypisanych do nich skrótów jest w podręczniku systemowym (''​man readline''​ i ''​man bash''​). 
-\\ 
-Konwencja zapisu skrótów klawiszowych to: 
-  * ''​^//​x//''​ lub ''​C-//​x//''​ to //Ctrl+x// (uwaga:''​^//​X//''​ lub ''​C-//​X//''​ to //​Ctrl+Shift+x//​),​ 
-  * ''​M-//​x//''​ to zwykle //Alt-x// (patrz: https://​en.wikipedia.org/​wiki/​Meta_key),​ 
-  * ''//​a//​ //​b//''​ to wciśnięcie po skrócie //a// skrótu //b//. 
- 
-Bash domyślnie dopisuje historię wykonanych poleceń do pliku ''​~/​.bash_history''​ w momencie wyjścia z powłoki. 
-\\ 
-Historię (tą z pliku połączoną z bieżącą) można wyświetlić komendą ''​history''​. (W ''​man bash_builtins''​ znajduje się opis przełączników.) 
- 
-<​small>​ 
- 
-Do wygodnego przeglądania historii można też użyć programu [[https://​dvorka.github.io/​hstr/​|hstr]] 
  
 +Komenda ''​lstopo''​ z paczki ''​[[https://​www.open-mpi.org/​projects/​hwloc/​|hwloc]]''​
 +pozwala zwizualizować topologię zasobów maszyny.
 </​small>​ </​small>​
- 
-~~Zadanie.#​~~ Jakim skrótem czyści się ekran? 
- 
-~~Zadanie.#​~~ Jakimi skrótami wyszukuje się wstecz w historii? 
- 
-~~Zadanie.#​~~ Jakim skrótem przesuwa się kursor o jedno słowo? 
- 
-<​small>​ 
- 
-~~Zadanie.#​~~ Jakim złożeniem skrótów przesuwa się kursor o 5 słów? 
- 
-~~Zadanie.#​~~ Jakim skrótów wstawia się ostatnie słowo z poprzedniego polecenia w historii? 
- 
-~~Zadanie.#​~~ Jakim złożeniem skrótów wstawia się trzecie od końca słowo z poprzedniego polecenia w historii? 
- 
-~~Zadanie.#​~~ Jakim skrótem zamienia się kolejnością to słowo z poprzednim? 
- 
-</​small>​ 
- 
-===== Edycja plików w konsoli ===== 
- 
-=== vi i vim === 
- 
-''​vi''​ jest często jedynym domyślnie instalowanym edytorem tekstowym. 
- 
-''​vim''​ to ulepszona wersja ''​vi''​. 
- 
-Żeby nauczyć się ''​vim'',​ uruchom ''​vimtutor''​. 
- 
- 
-<​small>​ 
- 
-''​vi''​ jest wpisane w standard [[https://​pubs.opengroup.org/​onlinepubs/​9699919799/​utilities/​vi.html|POSIX]]. 
-\\ 
-Jest też częścią minimalistycznych zestawów narzędzi takich jak busybox i toybox. 
- 
-</​small>​ 
- 
-~~Zadanie.#​~~ Przejdź całą pierwszą lekcję w ''​vimtutor''​. 
- 
-<​small>​ 
- 
-~~Zadanie.#​~~ Przejdź pozostałe lekcje w ''​vimtutor''​. 
- 
-=== nano === 
- 
-Nano jest stosunkowo prostym edytorem tekstowym. 
- 
-Podstawowe skróty są wyświetlone na dole ekranu. 
- 
-Więcej na: https://​www.nano-editor.org/​docs.php 
- 
-=== Emacs === 
- 
-[[https://​www.gnu.org/​software/​emacs/​|Emacs]] jest [[https://​en.wikipedia.org/​wiki/​Editor_war|odwiecznym rywalem]] ''​vim''​a w konkurencji programów do edytowania tekstu w konsoli. 
- 
-Po wpisaniu ''​emacs''​ możesz wybrać tutorial skrótem //Ctrl+h t//. 
- 
-=== Inne === 
- 
-  * [[https://​joe-editor.sourceforge.io/​joe]] 
-  * mcedit – edytor zintegrowany z [[https://​en.wikipedia.org/​wiki/​Midnight_Commander|mc]] 
-  * [[https://​micro-editor.github.io/​|micro]] 
-  * [[https://​neovim.io/​|neovim]] 
-  * [[https://​helix-editor.com/​|hx]] 
-  ​ 
-</​small>​ 
- 
- 
- 
  
  
so/ps_kill.1679314598.txt.gz · ostatnio zmienione: 2023/03/20 13:16 przez jkonczak