Tła i dobrze, z wyjątkiem programów, które powracają w późniejszym czasie wymagających interakcji z konsolą (na przykład „apt -y update &”, który ostatecznie przechodzi w stan STOP, ponieważ chce poprosić użytkownika o pytanie „naprawdę naprawdę wymuszać?” Znacznie później .... kiedy nikt już nie patrzy).
Aby podłączyć tę dziurę i poinformować proces, że terminal nigdy tak naprawdę nigdy nie będzie dla niego dostępny, dołączam <& - do niektórych moich poleceń, całkowicie odłączając je od aktywnego terminala informując, że STDIN nie jest już możliwe. Upewnij się jednak, że / bin / bash jest twoją powłoką, jeśli z niej korzystasz. Skrypt będzie rejestrował wszelkie błędy związane z brakiem dostępu do pseudoterminalu, na którym można by rzucić dowolny monit.
Na przykład:
`./runme.sh &> runme.log <&- & disown`
to mój najlepszy sposób na odłączenie się od bieżącej sesji terminala. Zarówno STDOUT, jak i STDERR zostają zalogowane do runme.log, nie będzie miało znaczenia, czy konsola lub powłoka zakończą się wcześniej, czy wylogujesz się / su na inne konto (bez śmieci terminali z runme), a dzięki odrzuceniu nawet rodzic-dziecko Relacja PID została usunięta.
AKTUALIZACJA: nawet z tym miałem problem z semaforem powiązanym z nazwą oryginalnego rodzica, więc teraz polecam zamiast tego:
at now <<< "(cmd1; cmd2; etc.) &> logfile.log"
Oczywiście, usuń &>, jeśli chcesz otrzymać dane wyjściowe z CRON w e-mailu lub przekieruj wszystko do / dev / null zamiast pliku.
screen
) może między innymi służyć do „zawijania” dłuższych procesów. Możesz się od niego odłączyć, wracając do powłoki, a następnie ponownie podłączyć i zobaczyć dane wyjściowe z uruchomionego procesu. Ponowne podłączenie można wykonać nawet z innego terminala, SSH itp. Mogą też istnieć inne programy, które pozwalają ci robić takie rzeczy.