Jak mogę odzyskać odrzucony proces?

12

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.

Sparr
źródło
2
Możliwy duplikat
przeniesienia

Odpowiedzi:

6

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ć.

mattdm
źródło
Nie wiedziałem o tym programie - chociaż prawdę mówiąc, nie jest dobrą praktyką go używać! Dobra odpowiedź, niezależnie od tego.
Andrew M.,
6

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.

Andrew M.
źródło
1
Procesy nie posiadają innych takich procesów. Odrzucony proces nadal działa tak jak Ty.
mattdm
Robią to po zamknięciu sesji nadrzędnej - jak wskazuje jego pytanie. Zaktualizowałem swoją odpowiedź, aby to odzwierciedlić.
Andrew M.,
Proces nadrzędny zmienia się na init, ale różni się od własności. EUID i UID procesu pozostają w stanie oryginalnego użytkownika. W przeciwnym razie może to być potencjalnie możliwe do wykorzystania, ponieważ każdy użytkownik nagle będzie miał sposób na uruchomienie kodu jako inny użytkownik, a użytkownik systemu nie mniej.
mattdm
1
EUID / UID! = PPID. Mówię o własności procesu, a nie o uprawnieniach.
Andrew M.,
Tak, myślę, że zgadzamy się na wszystko oprócz znaczenia terminu „własność procesu”. Odnosi się to do identyfikatora użytkownika, z którym powiązany jest proces, a nie do jego procesu nadrzędnego. Być może zamieszanie wynika z disownkomendy specyficznej dla bash, która, pomimo nazwy, w rzeczywistości nie ma nic wspólnego ze zmianą własności procesu.
mattdm