Jestem administratorem systemu i poproszono mnie o uruchomienie skryptu linux w celu wyczyszczenia systemu.
Polecenie jest takie:
perl script.pl > output.log &
więc to polecenie kończy się &
znakiem, czy ma jakieś szczególne znaczenie?
Mam podstawową wiedzę na temat powłoki, ale nigdy wcześniej tego nie widziałem.
&
a&&
:&
wykonuje pierwszą komendę w tle;&&
wykonuje pierwsze polecenie i warunkowo przechodzi do drugiego, jeśli zakończy się pomyślnie.Odpowiedzi:
&
Sprawia polecenia działają w tle.Od
man bash
:źródło
Dodatkowo możesz użyć znaku „&”, aby uruchomić wiele procesów przez jedno (1) połączenie ssh, aby zachować minimalną liczbę terminali. Na przykład, mam jeden proces, który nasłuchuje wiadomości w celu wyodrębnienia plików, drugi proces nasłuchuje wiadomości w celu przesłania plików: Używając „&” mogę uruchomić obie usługi na jednym terminalu, poprzez pojedyncze połączenie ssh z moim serwerem .
***** Właśnie zdałem sobie sprawę, że te procesy działające przez „&” będą również „żyły” po zamknięciu sesji ssh! całkiem zgrabne i przydatne, jeśli połączenie z serwerem zostanie przerwane **
źródło
nohup
będzie również podtrzymywać procesy.Jeśli nie powiedziano inaczej, polecenia przejmują pierwszy plan. Masz tylko jeden proces „pierwszego planu” działający w jednej sesji powłoki. Symbol & instruuje polecenia, aby były uruchamiane w procesie w tle i natychmiast wraca do wiersza poleceń w celu uzyskania dodatkowych poleceń.
Proces w tle nie pozostanie aktywny po zamknięciu sesji powłoki. SIGHUP kończy wszystkie uruchomione procesy. W każdym razie domyślnie. Jeśli Twoje polecenie jest długotrwałe lub działa przez czas nieokreślony (np. Mikrousługa), musisz je uruchomić bez hup, aby działało po rozłączeniu się z sesją:
EDYCJA: Wygląda na to, że występuje szary obszar dotyczący zamykania procesów w tle, gdy używane jest &. Należy tylko pamiętać, że powłoka może zamknąć proces w zależności od systemu operacyjnego i lokalnych konfiguracji (szczególnie na CENTOS / RHEL): https://serverfault.com/a/117157 .
źródło
Nie wiem na pewno, ale właśnie czytam książkę i otrzymuję informację, że program musi obsłużyć swój sygnał (tak jak wtedy, gdy naciskam
CTRL-C
). Teraz program może użyćSIG_IGN
do zignorowania wszystkich sygnałów lubSIG_DFL
przywrócenia domyślnej akcji.Teraz, jeśli to zrobisz,
$ command &
ten proces działający w tle po prostu ignoruje wszystkie sygnały, które wystąpią. W przypadku procesów pierwszoplanowych sygnały te nie są ignorowane.źródło