disown to wbudowane polecenie powłoki (m.in. bash), które usuwa zadanie z wewnętrznej tablicy zadań powłoki. W praktyce mówisz powłoce: „przestań pilnować tego procesu”. Dzięki temu, gdy zamkniesz terminal albo wylogujesz się z sesji, powłoka nie wyśle do zadania sygnału SIGHUP i proces żyje dalej. To ratunek, gdy odpaliłeś coś długodziałającego na pierwszym planie, zapomniałeś o nohup, a teraz chcesz spokojnie zamknąć SSH bez ubijania roboty.
Składnia i najważniejsze opcje
Podstawowa składnia wygląda tak: disown [-h] [-ar] [%numer_zadania]
%n— wskazuje konkretne zadanie po jego numerze z listyjobs(np.%1). Bez argumentu powłoka bierze bieżące zadanie.-h— nie usuwa zadania z tablicy, tylko oznacza je tak, by nie dostałoSIGHUPprzy zamknięciu powłoki. Nadal widzisz je wjobs.-a— działa na wszystkich zadaniach naraz, gdy nie podasz konkretnego numeru.-r— ogranicza działanie tylko do zadań aktualnie działających (running), pomija zatrzymane (stopped).
Opcje -a i -r możesz łączyć (-ar), żeby objąć wszystkie biegnące zadania.
Przykłady użycia
disown— odpina bieżące (ostatnie) zadanie z tablicy zadań powłoki.disown %2— odpina konkretnie zadanie numer 2, które wcześniej podejrzałeś przezjobs.disown -h %1— zostawia zadanie 1 w tablicy, ale chroni je przedSIGHUP, więc przeżyje zamknięcie powłoki.disown -a— odpina wszystkie zadania naraz, zanim zamkniesz sesję.disown -ar— odpina wyłącznie te zadania, które realnie działają, zostawiając zatrzymane w spokoju.
Typowy scenariusz ratunkowy: proces leci na pierwszym planie, więc wciskasz Ctrl+Z (pauza), potem bg (wznowienie w tle) i na koniec disown — proces działa dalej, a Ty zamykasz terminal.
Częste błędy i pułapki
disown nie jest tym samym co nohup. nohup uruchamiasz przed startem procesu i przekierowuje on wyjście do pliku, a disown stosujesz na już działającym zadaniu. Jeśli zadanie pisało na terminal, po jego zamknięciu może paść przy próbie zapisu na nieistniejące już wyjście — zawczasu przekieruj stdout i stderr do pliku.
Pamiętaj też, że odpięty proces znika z listy jobs, więc nie zatrzymasz go już przez kill %1 — musisz złapać go po PID (np. przez ps czy pgrep). To builtin powłoki, nie osobny program: w czystym sh (POSIX) go nie ma, działa w bashu i zsh. Składnia opcji bywa drobnie różna między powłokami, więc w razie wątpliwości zajrzyj do help disown.
Powiązane komendy: jobs, bg, fg, nohup, kill, setsid.