Powiedzmy, że uruchamiam proces w terminalu, który wysyła dane wyjściowe do standardowego błędu podczas działania. Chcę przenieść proces w tło i jednocześnie go uciszyć.
Czy istnieje sposób, aby to zrobić bez zatrzymywania procesu i ponownego uruchamiania go przy użyciu &
i > /dev/null 2>&1
? Zastanawiam się, czy jest jakieś polecenie, które wykonuje bg
i może zmienić deskryptory wyjściowe procesu docelowego.
źródło
SIGSTOP
do procesu (lub jak mówisz robi Ctrl + Z ) nie uciszyć proces. Zatrzymuje proces!Proces uruchamiany z terminala ma swoje stdin, stdout i stderr związane z terminalem i nie możesz nic na to poradzić bez odzyskania kontroli nad tym terminalem ... Normalnie. Ale są pewne podstępne narzędzia, które pozwalają ci to zrobić. Spójrz na ten przykład . I inne programy jak
retty
wspomniano tam.źródło
Nie zgadzam się z andcoz, że jest już za późno, aby uciszyć wyjście.
Zakładając, że proces działa na pierwszym planie, użyj go,
Ctrl-Z
aby zawiesić proces. Spowoduje to zgłoszenie numeru zadania i identyfikatora procesu. Możesz przejść dalej i przenieść proces na drugi plan, używającbg %1
(dla zadania nr 1). Mimo że przenosi to proces na tło, nie wycisza danych wyjściowych. Aby wyciszyć dane wyjściowe, można użyćgdb
do przekierowania wszystkich danych wyjściowych/dev/null
.Zostało to bardzo dobrze opisane wcześniej na /programming/593724/redirect-stderr-stdout-of-a-process-after-its-been-started-using-command-lin/593764#593764 .
źródło
Jeszcze innym narzędziem wiersza polecenia jest
detach
. Najnowsza wersja obsługuje pisanie plików pid, używanie plików dla stdin, stdout i stderr oraz uruchamianie na pierwszym planie. (Strona internetowadetach
omawia również podobne narzędzia.)http://inglorion.net/software/detach/
źródło