Wydałem ^z; bg; disown
sekwencję, aby umożliwić mi zamknięcie sesji ssh, w której prowadzę bardzo ważny, długotrwały proces. Ten proces zapisuje dane wyjściowe statusu do stderr i kontynuuje to nawet po odłączeniu (potwierdzone przez lsof, stderr fd jest otwarty na r / w).
Czy istnieje sposób na ustalenie, czy proces rzeczywiście został odrzucony (nie odzyska ODCZYTU, jeśli powłoka go odzyska)?
Odpowiedzi:
W Bash
disown
wydane przez siebie polecenie usunie procesy działające w tle (przezbg
lub&
) z aktywnej tabeli zadań i oznaczy je, aby nie otrzymywały POWIĘKSZENIA po wylogowaniu.Możesz także przekazać jedno lub więcej zadań do odrzucenia, np
disown 1 3
.disown -h
Flaga jest przydatna, jeśli chcesz zachować miejsca pracy w tabeli, ale nadal nie SIGHUP na wylogowania.Możesz wyświetlić tabelę zadań, wydając
jobs
polecenie. Po udanym tle pojawi się[1]+ command &
. Po odrzuceniu zadania nie powinno ono być wyświetlane w tabeli zadań i nie powinno być zabijane podczas wylogowywania. Nadal można zobaczyć proces za pomocąps ux
,top
oraz innych narzędzi procesowych oglądania.Po odrzuceniu zadania możesz poczekać na jego naturalne zakończenie lub wysłać sygnał
kill
do PID, aby go zatrzymać.Ponieważ Bash po prostu usuwa zadanie z listy uruchomionych zadań do zakończenia, a uchwyty plików na stdout terminala i stderr są nadal otwarte, będziesz otrzymywać dane wyjściowe z zadania do momentu zamknięcia urządzenia terminala (po wylogowaniu) .
Przykłady:
Zwykle używam tylko
disown
jeśli uruchomić polecenie potencjalnie długo działa jakrsync
lubcp
a potem zdecydować, muszę się wylogować bez zakończenia go. Jeśli wiesz, że zamierzasz uruchomić polecenie i wylogować się, możesz przechwycić dane wyjściowe, przesyłając je strumieniowo lubtee
wrzucając do pliku, uruchamiając jenohup
lub uruchamiającscreen
(co pozwala ci odzyskać własność polecenia / zakończyć później ).Przykłady:
źródło
detach
zadanie w tle, zostanie ono odłączone :) Naprawdę nie ma tam środka, gdzie uruchomienie go w procesie w tle nic nie da. sprawdzanie sprawdzajobs
tylko, czy nie próbowałeś odłączyć zatrzymanego procesu lub czegoś takiego.