disown

Usuwa zadanie z tablicy zadań powłoki, by przeżyło jej zamknięcie.

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 listy jobs (np. %1). Bez argumentu powłoka bierze bieżące zadanie.
  • -h — nie usuwa zadania z tablicy, tylko oznacza je tak, by nie dostało SIGHUP przy zamknięciu powłoki. Nadal widzisz je w jobs.
  • -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ś przez jobs.
  • disown -h %1 — zostawia zadanie 1 w tablicy, ale chroni je przed SIGHUP, 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.