Tryb kopiowania ekranu GNU blokuje wykonywanie?

11

Używam trybu przewijania / kopiowania GNU Screen. Nacisnąłem więc Control-A [, aby przejść do trybu kopiowania, przewiń w górę do interesującej mnie sekcji ... a potem zapomnę.

Wygląda jednak na to, że pozostawienie ekranu GNU w trybie przewijania / kopiowania blokuje wykonywanie (niezależnie od tego, która aplikacja była wtedy uruchomiona). Na przykład, jeśli uruchomię lokalny serwer sieciowy, jeśli jestem w trybie przewijania / kopiowania, żądania wysłane do tego serwera WWW przekroczą limit czasu: proces nie odpowiada, dopóki nie wyjdę z trybu kopiowania / przewijania.

Widziałem to zarówno w skrypcie / serwerze Ruby On Rails, jak i w narzędziu Wklej Python.

Zastanawiałem się nad włączeniem trybu rejestrowania dla moich okien, a następnie po prostu przeglądaniem / przeglądaniem tych plików dziennika jako alternatywą, ale jeśli można to kontrolować innymi sposobami (ustawienie, aktywowanie trybu kopiowania w inny sposób) jestem bardzo zainteresowany.

Moja wersja ekranu mówi:

Wersja ekranu 4.00.03 (FAU) 23-paź-06

(Zapytałem o to na quora.com, ale może to lepsze miejsce)

RyanWilcox
źródło

Odpowiedzi:

8

Przyczyną blokowania procesów jest to, że ekran zablokuje potok wyjściowy procesu, gdy jesteś w trybie wklejania kopii. Nie uważam tego za błąd, ponieważ realistycznie pytasz ekran o przechowywanie potencjalnie nieograniczonej ilości informacji w buforze podczas kopiowania / wklejania. Jeśli chcesz, aby wyjście programu przechodziło obok, ale możesz też od czasu do czasu go zatrzymać, wypróbuj to.

program > logfile 2>&1 & 
less logfile

2> i 1 połączy stderr i stdout z twojego programu. Program & wysyła program w tło. W razie potrzeby użyj przycisku fg, aby przenieść go na pierwszy plan. Teraz naciśnij F, aby podążać za końcem pliku dziennika, gdy rośnie on z mniejszą liczbą. Naciśnij ctrl + c, jeśli chcesz się zatrzymać i zbadać coś, a następnie F, aby powtórzyć. Możesz także nacisnąć i, aby ograniczyć widoczne linie w mniejszym stopniu do wyrażenia regularnego. Bardzo przydatny podczas przeglądania plików dziennika.

jmh
źródło
„ekran zablokuje potok wyjściowy procesu, gdy jesteś w trybie wklejania kopii” - może to być prawda po wygenerowaniu pewnej ilości danych wyjściowych, ale w tym przypadku nie wydaje się to prawdą: while ((1)) ; do echo $i; i=$((i+1)); sleep 0.1; done- spróbuj wywołać Kopiowanie tryb i poczekaj chwilę. Gdy wyjdziesz z trybu kopiowania, wartość i przeskoczy, pokazując, że wykonywanie trwało w tle. Jednak widziałem dane wyjściowe bloku ekranu dla niektórych procesów, więc jestem ciekawy, co dokładnie określa, czy ekran blokuje się, czy nie.
davidA
„co dokładnie określa, czy ekran blokuje się czy nie” - określa to rozmiar bufora przewijania. Możesz go zwiększyć, aby był nieograniczony, ale zajmie to pamięć. Ale się nie zablokuje.
san