Fakt „odrzucenia” procesu ma znaczenie tylko dla interaktywnej powłoki, która go utworzyła. Oznacza to, że powłoka nie zawiera (już) procesu w tabeli zadań i że SIGHUP nie zostanie wysłany do tego procesu po wyjściu powłoki. To nie jest tak naprawdę związane z twoimi pytaniami.
O tym, co dzieje się z wyjściami wysyłanymi do usuniętego wirtualnego terminala: sam wykonałem kilka testów i zauważyłem, że /dev/pts/x
urządzenia nie są dostępne i nie zostaną przydzielone ponownie, dopóki wszystkie deskryptory plików, które na nie wskazują, nie zostaną zamknięte. Nie widzę więc powodu, dla którego zapisy do usuniętego terminala byłyby przechowywane. Myślę, że nie jest to nawet zdefiniowane przez POSIX.
Jeśli chodzi o pobieranie wyników jakiegoś procesu, który zapisuje na terminalu, nie sądzę, że jest to możliwe, nawet gdy terminal wciąż żyje¹. Wszystko, co możesz zrobić, to pobrać bezpośrednie wejście do terminala (tj. Naciśnięcia klawiszy lub symulowane naciśnięcia klawiszy przez część główną pty). Gdyby procesy odczytywały na standardowym to, co zapisywane są na ich terminalach, dla większości procesów prowadziłoby to do pętli self io.
Jeśli chodzi o ostatnią uwagę na temat zakończenia procesu, tak naprawdę nie wiem, co się dzieje, ale podejrzewam raczej dziwne zachowania z sygnałami (SIGTTOU, SIGTTIN, SIGHUP lub innymi) związane ze stanem pierwszego planu / tła grup procesów, gdy sesja lider kończy (np. su
we wspomnianym przypadku).
Odpowiedź na edycję: Nie, jeśli chodzi o dane wyjściowe, nic się nie zmienia, gdy proces jest odrzucany: nadal jest przyłączony do terminala sterującego (chyba że odłączył się już tak jak demony). Możesz to zobaczyć za pomocą ps
. Jednak nie będziesz już mógł używać poleceń fg
/ bg
/ jobs
dostarczonych przez powłokę dla tego procesu. Oznacza to, że podawanie danych wejściowych z terminala może być trudne (wymaga przynależności do grupy procesów pierwszego planu).
-
1. chyba że proces jest skłonny lub przejęty za pomocą niektórych narzędzi do debugowania (patrz komentarze powyżej).