Podobnie jak w przypadku wielu poprzednich pytań, znalazłem pracę, którą chciałbym uruchomić na ekranie. Byłem zmuszony odrzucić ten proces, ponieważ musiałem się rozłączyć. Po ponownym połączeniu widzę, że proces jest nadal uruchomiony. Jak mogę „odzyskać” ten proces, aby zobaczyć jego wyniki i przekazać dane wejściowe?
To pytanie różni się od przeniesienia uruchomionego procesu na ekran, ponieważ polega na ponownym otwarciu utraconych uchwytów stdin / out / err.
Odpowiedzi:
To zduplikowane pytanie - patrz Przenoszenie już uruchomionego procesu do Screena , który wskazuje na retty , który jest opisywanym okropnym włamaniem implementującym to, co zawsze przypuszczałem, może być możliwe, ale nigdy tak naprawdę nie próbowałem: znajduje fd 0, 1 i 2 (odpowiednio standardowe wejście, wyjście i błąd) dla procesu i dołącza się do nich, jak okropny nienormalny pasożyt, który nie powinien być.
źródło
Odrzucając proces, skutecznie mówisz, że chcesz, aby ignorował SIGHUPs wydane przez terminal. Po zamknięciu sesji (powiedzmy bash), proces ten stanie się własnością init. Kiedy więc mówisz, że chcesz ponownie przejąć proces po rezygnacji z własności, mówisz, że chcesz odebrać prawo własności innemu procesowi - który nie został zaimplementowany i nie bez powodu. Po prostu nie jest to możliwe z gracją w Linuksie.
źródło
disown
komendy specyficznej dla bash, która, pomimo nazwy, w rzeczywistości nie ma nic wspólnego ze zmianą własności procesu.