Ten post może pomóc. Zalecane jest:
- proces w tle (z Ctrl-Z, a następnie bg )
- uruchom disown -h% [jobid] (prawdopodobnie bash-ism, więc będziesz musiał tłumaczyć dla tcsh)
Złe wieści , oczywiście, jest to, że BG musiałyby być wykonane w tej samej powłoce proces jest uruchomiony w ... ale ... może to już są umieszczane w tle.
Naprawdę złą wiadomością jest to, że wyprze wezwanie może muszą być wykonane w tej samej powłoki. W takim przypadku tak, jesteś pieprzony. Ale nie jestem pewien, może root może to wymusić.
Hmm Możliwe dobre wiadomości - tcsh automatycznie wyłącza :
Jeśli program tcsh zakończy działanie w sposób nienormalny, automatycznie wyłącza zadania uruchomione w tle po jego zakończeniu.
Więc jeśli twój długoterminowy proces jest już w tle, zabicie jego rodzica tcsh powinno pozwolić mu kontynuować. Proces jest teraz odłączony od terminalu początkowego. (Jeśli nie, zobacz „złe wieści” powyżej.)
Niestety nie jest to ekran, więc nie ma prawdziwego ponownego połączenia. Możesz go sfałszować za pomocą gdb (ponownie, z pierwszego linku):
[...] przy niektórych brudnych włamaniach ponowne otwarcie procesu „stdout / stderr / stdin” nie jest niemożliwe.
Więc nadal możesz utworzyć puste okno (na przykład, które uruchamia tryb uśpienia).
A następnie użyj na przykład gdb, aby dołączyć do procesu, wykonaj połączenie call close (0)
call close (1)
call close (2)
call open ("/ dev / pts / xx", ...)
call dup (0)
zadzwoń dup (0)
odłącz
Dane wyjściowe procesu przejdą na ekran. Nie byłby podłączony do tego terminalu ekranowego, więc na przykład [sic] zabiłby polecenie „uśpienia”, a nie proces, ale to może wystarczyć dla OP.
Zastanawiam się, czy w tym procesie nie powinno być również „call dup (1)” i „call dup (2)” ...