Dołącz do wyjścia procesów w celu wyświetlenia

Jak "podłączyć" widok konsoli / terminala do wyjścia aplikacji, aby zobaczyć, co może być napisane?

Jak odłączyć wyjście aplikacji bez zabijania aplikacji?

Normalnie, jeśli odpalisz gadatliwą aplikację za pomocą wiersza poleceń, zobaczysz wszystkie rodzaje wspaniałych wyników. Jednak powiedzmy, że mam szczególnie rozmowny program działa jak KINO i chcę zobaczyć jego wyjście w danym momencie bez ponownego uruchamiania go przez wiersz poleceń nie mogę, przynajmniej Nie wiem jak.

Author: aggitan, 2009-04-04

5 answers

Jest tu kilka opcji. Jednym z nich jest przekierowanie wyjścia polecenia do pliku, a następnie użycie 'tail' do przeglądania nowych linii, które są dodawane do tego pliku w czasie rzeczywistym.

Inną opcją jest uruchomienie programu wewnątrz 'screen' , który jest rodzajem tekstowej aplikacji terminalowej. Sesje ekranowe mogą być dołączane i odłączane, ale nominalnie mają być używane tylko przez tego samego użytkownika, więc jeśli chcesz dzielić się nimi między użytkownikami, jest to wielki wrzód na dupie.

 10
Author: Don Werve,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-03 21:20:31

Myślę, że mam prostsze rozwiązanie, po prostu poszukaj directoy, którego nazwa odpowiada PID, którego szukasz, pod pseudo-systemem plików dostępnym pod ścieżką /proc. Więc jeśli masz uruchomiony program, którego ID jest 1199, cd do niego:

$ cd /proc/1199

Następnie poszukaj katalogu fd Pod

$ cd fd

Ten katalog fd zawiera obiekty deskryptorów plików, których używa twój program (0: stdin, 1: stdout, 2: stderr) i tylko tail -f Ten, którego potrzebujesz - w tym przypadku, stdout): {]}

$ tail -f 1
 215
Author: licorna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-22 14:51:51

Szukałem dokładnie tego samego i znalazłem, że możesz to zrobić:

strace -ewrite -p $PID

Nie dokładnie to, czego potrzebowałeś, ale jest dość blisko

Próbowałem przekierować wyjście, ale to nie działa dla mnie, maby bo proces pisał do gniazda, Nie wiem

 36
Author: Paul Scheltema,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-07 13:17:14

Jak "załączyć" a konsola/terminal-widok na aplikacji, dzięki czemu mogę zobaczyć, co to może być powiedzenie?

Jeśli chodzi o to pytanie, wiem, że możliwe jest przechwycenie wyjścia, nawet jeśli nie uruchomiłeś komendy sceen przed uruchomieniem processus.

Chociaż nigdy nie próbowałem, znalazłem ciekawy artykuł, który wyjaśnia, jak to zrobić za pomocą GDB (i bez ponownego uruchamiania twojego proces).

Redirecting-output-from-a-running-process

W zasadzie:

  1. sprawdź listę otwartych plików dla swojego procesu, dzięki / proc / xxx / fd
  2. Załącz swój proces za pomocą GDB
  3. gdy jest on wstrzymany, Zamknij interesujący Cię plik, wywołując close () function (możesz użyć dowolnej funkcji swojego procesu w GDB. Podejrzewam, że potrzebujesz debugowania symboli w swoim procesie..)
  4. Otwórz nowy plik wywołujący create () lub open () function. (Spójrz w komentarzach na końcu, zobaczysz, że ludzie sugerują użycie dup2 () , aby upewnić się, że ten sam uchwyt będzie w użyciu)
  5. odłącz proces i pozwól uruchomić.

Przy okazji, jeśli używasz systemu operacyjnego linux na i386 box, komentarze mówią o lepszym narzędziu do przekierowania wyjścia na nową konsolę : 'retty' . Jeśli tak, rozważ jego użycie.

 5
Author: yves Baumes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-03 22:38:00

Chciałem zdalnie obserwować proces aktualizacji yum, który został uruchomiony lokalnie, więc chociaż prawdopodobnie były bardziej efektywne sposoby, aby to zrobić, oto co zrobiłem:

Watch cat / dev / vcsa1

Oczywiście chcesz użyć vcsa2, vcsa3, itd., w zależności od tego, który terminal był używany.

Tak długo, jak moje okno terminala było tej samej szerokości co terminal, na którym uruchamiane było polecenie, co 2 sekundy widziałem migawkę ich bieżącego wyjścia. Pozostałe komendy polecany gdzie indziej nie działał szczególnie dobrze dla mojej sytuacji, ale ten zrobił sztuczkę.

 0
Author: RedScourge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-08 02:40:31