Bash Tła zarządzanie procesami

Bash Tła zarządzanie procesami

Istnieje wiele razy, gdy deweloper lub użytkownik Bash będzie chciał uruchomić proces w tle, z wiersza poleceń lub od wnętrza skryptu Bash, a następnie ponownie obsłużyć ten sam proces później. Istnieją różne narzędzia wiersza poleceń, które pozwalają na to. Możliwość uruchamiania, zarządzania i niszczenia procesów w tle jest wymogiem dla wielu bardziej zaawansowanych zadań na poziomie, szczególnie w obszarach zaawansowanych skryptów i kontroli procesu.

W tym samouczku się nauczysz:

  • Jak zacząć, obsługiwać i/lub zarządzać i niszczyć procesy w tle
  • Jakie narzędzia wiersza poleceń są dostępne, aby pomóc w zarządzaniu procesami BASH
  • Przykłady podkreślające użycie procesów tła w wierszu poleceń Bash
Bash Tła zarządzanie procesami

Zastosowane wymagania i konwencje oprogramowania

Wymagania oprogramowania i konwencje linii poleceń Linux
Kategoria Wymagania, konwencje lub wersja oprogramowania
System Niezależny od rozkładu Linuksa
Oprogramowanie Wiersz poleceń Bash, system oparty na Linuksie
Inny Wszelkie narzędzie, które nie jest zawarte w skorupce Bash domyślnie można zainstalować za pomocą za pomocą sudo apt-get instal instal narzędzie (Lub Mnij instalacja dla systemów opartych na Redhat)
Konwencje # - Wymaga wykonywania Linux -Commands z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudo Komenda
$-Wymaga wykonania Linux-commands jako zwykłego niepewnego użytkownika

Przykład 1: Uruchamianie procesu w tle i przywrócenie go na pierwszy plan

$ Sleep 1000 i [1] 25867 $ FG Sleep 1000 


Tutaj rozpoczęliśmy 1000 -sekundowy proces snu w tle. Jeśli chcemy umieścić proces w tle, możemy użyć Ampersand (I) Podpisz za dowolnym polecenie. To umieści proces w tle i zgłasza się Pid (Identyfikator procesu, numer identyfikacyjny, który identyfikuje każdy proces działający na komputerze Linux). W tym przykładzie Pid Jest 25867. Zauważ, że proces ciągle działa, gdy jest umieszczony w tle, co daje nam to, co najlepsze z obu światów; Proces jest wykonywany i w międzyczasie odzyskujemy nasz wiersz poleceń! Świetnie.

Następnie umieszczamy proces z powrotem na pierwszym planie (jakby nigdy nie było instrukcji w tle), używając FG (I.mi. Pierwszy plan) polecenie. W rezultacie widzimy, jaki proces jest ponownie umieszczony na pierwszym planie (ja.mi. Sen 1000) a nasz wiersz polecenia nie wraca, gdy położyliśmy sen z powrotem na pierwszym planie, a wiersz polecenia powróci tylko po zakończeniu 1000 sekundy snu.

Powiedzmy, że umieściliśmy Sen 1000 W tle robił inną pracę przez 500 sekund, a następnie wykonano FG… Jak długo sen nadal będzie działał? Jeśli zgadujesz (lub znasz) 500 sekund, masz rację. Pierwsze 500 sekund spędzono na uruchomieniu jako proces w tle, a drugi 500 będzie jako proces na pierwszym planie.

Zwróć również uwagę, że jeśli zakończysz powłokę, twoje polecenie zakończy się - niezależnie od tego, czy działa ono w tle, czy na pierwszym planie (chyba, że ​​go wyrzuciłeś, więcej na ten temat w następnym przykładzie).

Przykład 2: Odrzucenie procesu

$ Sleep 1000 i [1] 26090 $ Nalej %1 $ 

Tutaj rozpoczęliśmy kolejny 1000 sekund i zostaliśmy poinformowani o PID o procesie tła, jak poprzednio. Następnie wykonaliśmy Odrzucanie %1, odnosząc się do pierwszego procesu tła (jak wskazano również [1] Przed PID!) i instruowanie Basha do odejścia (oddzielenia) Proces ten od obecnej powłoki. Nie chodzi o to, że zostanie odłączony od bieżącego użytkownika (i na przykład Ps -ef | Grep Sleep | grep -v grep rzeczywiście nadal pokaże Twojego użytkownika), ale raczej z bieżącej sesji powłoki. Patrzeć:

$ Sleep 1000 i [1] 26214 $ Odnotowanie %1 $ ps -ef | Grep Sleep | GREP -V GREP ROEL 26214 26120 0 13:13 PTS/3 00:00:00 Sleep 1000 $ Exit 

Następnie otwieranie nowej skorupy i ponowne wykluczenie Ps Widzimy, że polecenie jest nadal tam i jest teraz dołączone do PPID (rodzicielski PID) 1 zamiast 26120 jako rodzicielski PID:

$ ps -ef | Grep Sleep | GREP -V GREP ROEL 26214 1 0 19:48 ? 00:00:00 Sen 1000 

To tak, jakby powłoka nadal działała (zwróć uwagę 26214 PID nadal jest aktywny/powiązany z biegiem spać) Jednak część aktywnego wiersza poleceń zniknęła!

Świetnie, więc daje nam to sposób na odłączenie procesów od obecnej powłoki, a tym samym upewnić się, że nadal działają po zamknięciu naszej sesji powłoki.

Przykład 3: Umieszczenie polecenia na tle

$ Sleep 1000 ^z [1]+ Zatrzymany sen 1000 $ BG %1 [1]+ Sleep 1000 & $ 

Tutaj zaczęliśmy Sen 1000 na pierwszym planie (nie I został użyty) i przerwany ten proces w skrócie klawiatury Ctrl+z. Zauważ, że chociaż wyjście mówi ^Z (I ^ jest symbolem wskazującym KLAWISZ KONTROLNY), Z to właściwie małe litery z, Więc nie musisz używać ZMIANA, Tylko Ctrl+z.

Zauważ, że proces faktycznie się zatrzymał, nie kontynuował działalności. Teraz umieściliśmy proces w tle i zatrzymaliśmy go. Aby ten proces nadal działał teraz, mamy dwie opcje; FG %1 - I.mi. Umieść proces wskazany przez [1] z powrotem na pierwszy plan i kontynuuj działanie normalnie lub BG %1 które wznowią proces, ale w tle. W przykładzie możemy zobaczyć to drugie, a nasz wiersz polecenia powraca zgodnie z oczekiwaniami.

Zauważ, że powyższe można nieco rozszerzyć zapierać się, Dopasowanie często używanego sposobu obsługi procesu podczas korzystania z zdalnego serwera. Załóżmy, że jesteś połączony przez SSH z zdalnym serwerem i rozpocząłeś dużą pracę, na przykład tworzenie kopii zapasowych lub raportów. Teraz chciałbyś opuścić swoje biuro na cały dzień, ale nie masz pewności, czy twoje połączenie SSH pozostanie na żywo przez całą noc, a nawet czy twój komputer nie będzie hibernowany, czy podobny. Każda z tych działań może zagrozić pracownikowi!

W takim przypadku możesz wykonać następujące czynności;

$ Sleep 1000 ^z [1]+ Zatrzymany sen 1000 $ BG %1 [1]+ Sleep 1000 & $ Odpad %1 $ 


I szczęśliwie i bezpiecznie odejdź od komputera (po jego zamknięciu;), ponieważ możesz mieć pewność, że - nawet jeśli połączenie SSH ulegnie awarii lub komputer hibernuje lub sprzątająca dama wybije przewód zasilający - że Twoja praca pozostanie działanie. Ponieważ proces został oderwany/odłączony od bieżą.

Jednym małym zastrzeżeniem jest to, że nie można użyć FG Rano, aby przywrócić pracę na pierwszym planie, nawet jeśli twoje połączenie SSH i Shell nigdy nie zakończyły się/nie zakończyły:

$ FG Bash: FG: Obecny: Brak takiego zadania $ FG %1 Bash: FG: %1: Brak takiego zadania 

Kiedy jest odrzucony, jest odłączony i zniknął! Praca nadal będzie działać w tle, a możesz nawet go zabić za pomocą PID (jak można zaobserwować Ps -ef | Grep Your_Process_name | grep -v grep.

Przykład 4: Wiele procesów w tle i zakończenie procesów

Najpierw rozpoczynamy dwa procesy w tle za pomocą naszego zaufanego Sen 1000 przykład:

$ Sleep 1000 i [1] 27158 $ Sleep 1000 i [2] 27159 

Widzimy tutaj, że dwa procesy w tle ([1] I [2], z pidami 27158 I 27159 odpowiednio) zostały rozpoczęte. Następnie zabijamy pierwszy proces:

$ zabójstwo %1 $ [1]- Zakończony sen 1000 $ 

To było proste/łatwe, prawda? Jedno pytanie, które można zadać, jest to, dlaczego zakończone informacje nie wyświetlają natychmiast (wymagana jest dodatkowa prasa Enter, jak widać), a powód jest to, że proces nie został zakończony przed zwrotem wiersza poleceń. W ramach pracy wykonywanej za każdym razem przed pokazaniem nowego wiersza poleceń jest zgłaszanie liczby statusów, w tym status procesu tła w razie potrzeby. Tak więc, gdy Enter został ponownie naciśnięty (wskazany przez puste $ Linia, pokazano raport z zakończonego procesu.

Przykład 5: jeden wykonany przed drugim

Ponownie zacznijmy dwa procesy, ale tym razem drugi proces będzie spał tylko przez 3 sekundy:

$ Sleep 1000 i [1] 27406 $ Sleep 3 i [2] 27407 $ 

Po około 5 sekundach, naciśnięcie Enter, zobaczymy:

$ [2]+ Done Sleep 3 

Co się stanie, jeśli będziemy używać FG W takim przypadku bez oryginału [1] specyficzny?

$ fg sleep 1000 ^z [1]+ Zatrzymany sen 1000 $ 


Pierwszy proces będzie kontynuowany! Dzieje się tak również, jeśli zastosowano procedurę odwrotną:

$ Sleep 10 i [1] 27346 $ Sleep 1000 i [2] 27347 $ [1]- DOTYCZNY Sen 10 $ FG Sleep 1000 ^Z [2]+ Zatrzymany sen 1000 

FG Polecenie zawsze przyjmuje ostatnie polecenie, które zostało umieszczone na tle (i które jeszcze nie zostało ukończone) i ponownie umieścić je na pierwszym planie.

Wniosek

W tym artykule spojrzeliśmy na różne polecenia, w tym BG, FG i tło Idioma Ampersand I które można umieścić po dowolnym poleceniu, aby umieścić to polecenie na tle. Zbadaliśmy również użytkownika zabić polecenie i spojrzenie na rozwiązanie różnych procesów w tle za pomocą % Bash Idiom z dopasowanym numerem procesu w tle, takim jak %1 Do [1] itp.

Jeśli chcesz dowiedzieć się więcej o Bash w ogóle, spójrz na przydatne serię wskazówek i przykładów linii poleceń Bash.

Ciesz się nowymi umiejętnościami znalezionymi, a jeśli zrobisz coś fajnego z procesami w tle, zostaw nam komentarz poniżej!

Powiązane samouczki Linux:

  • Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
  • Mastering Bash Script Loops
  • Zagnieżdżone pętle w skryptach Bash
  • Rzeczy do zainstalowania na Ubuntu 20.04
  • Wielokrotyściowe skrypty i zarządzanie procesami w…
  • Mint 20: Lepsze niż Ubuntu i Microsoft Windows?
  • Obsługa danych wejściowych użytkownika w skryptach Bash
  • Hung Linux System? Jak uciec do wiersza poleceń i…
  • Samouczek debugowania GDB dla początkujących
  • Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux