Z pytań takich jak unix.stackexchange.com/a/4039/13496 Słyszę o retty i neercs . Hmmm ... zastanawiam się, czy istnieje coś takiego jak warstwa „ screen tutaj”, zanim następnym razem uruchomię proces, czy w przyszłości stracę górny terminal, co ułatwi powrót do standardowego wejścia / wyjścia / błędu
Drugorzędnym / niejawnym problemem w tym pytaniu, którego nie mogę pojąć, jest ... dlaczego powłoka zdecydowała się odrzucić zawieszone zadanie, gdy w tle jest nowsze / właśnie uruchomione zadanie, które nawet nie potrzebuje / czeka na standardowe wejście? Do takiego leczenia się przyzwyczaiłem, więc nie wiem, co tu się zmieniło ...
Korzystanie z GNU screenjest najlepszym rozwiązaniem.
Uruchamianie ekranu uruchomionego przy pierwszym logowaniu - uruchamiam screen -D -R, uruchamiam polecenie i albo je rozłączam, albo zawieszam, CTRL-Za następnie odłączam od ekranu, naciskając CTRL-Awtedy D.
Po ponownym zalogowaniu się do urządzenia połącz się ponownie, uruchamiając screen -D -R. Będziesz w tej samej powłoce co wcześniej. Możesz uruchomić, jobsaby zobaczyć zawieszony proces, jeśli to zrobiłeś, i uruchomić %1(lub odpowiednie zadanie nr), aby ponownie go wysunąć na pierwszy plan.
Patrząc wstecz, wydaje się, że jest to najbardziej bezbolesne rozwiązanie, pod warunkiem, że możesz odpowiednio zaplanować i uruchomić swoje procesy z poziomu środowiska ekranowego. Tak czy inaczej, uczyniłem to oficjalną odpowiedzią!
Możesz odwołać „własność” programu z powłoki za pomocą disownwbudowanego:
# press Ctrl+Z to suspend the program
bg
disown
Mówi to jednak powłoce, aby nie wysyłała SIGHUPsygnału do programu po wyjściu z powłoki. Program zachowa dowolne połączenie z terminalem, zwykle jako standardowe strumienie wejściowe, wyjściowe i błędów. Nie ma sposobu, aby ponownie podłączyć je do innego terminala. ( Ekran działa poprzez emulację terminala dla każdego okna, więc programy są dołączone do okna ekranu).
Jakie wspomniane narzędzia działają z grupą procesów (np. bzcat a.bz2 | grep text)? Człowiek za reptyrtwierdzi, że nie obsługuje przenoszenia procesów z dziećmi.
To jest niesamowite; powinno to rozwiązać problem przyjaciółki polegający na ciągłej utracie pracy, prowadząc ją prosto w ssh, a następnie potrzebując wsiąść do pociągu. „Ups, zapomniałem użyć ekranu. Znowu.”
+1 Chociaż zaakceptowana screenodpowiedź jest oczywiście idealna, w rzeczywistości nie odpowiada na pytanie, które konkretnie wymaga sposobu przeniesienia aktualnie działającego procesu do screenlub podobnego. Zobacz także tę odpowiedź: serverfault.com/a/284795
Nie używam go regularnie, ale Neercs twierdzi, że to popiera. Jest to screenpodobny program z różnymi fantazyjnymi funkcjami, takimi jak lepsze zarządzanie panelem, ale najważniejsze, co oferuje, to możliwość zaimportowania procesu do panelu
Ciekawy. Odtwarza ptracefunkcję dirty ( ), ale nie tylko manipuluje deskryptorami plików, ale również rozwidla proces. Jest w stanie złapać find /, ale rozbił interaktywne uderzenie.
Program injcode pozwala na wstrzyknięcie dowolnego kodu do uruchomionego procesu, niezależnie od tego, czy wiedziałeś wcześniej i czy uruchomiłeś screen lub tmux
Z pliku README:
Przykład 1: przenieś irssi z jednego terminala do drugiego
Może przenieść to na ekran.
Najpierw uruchom irssi w jednym terminalu.
Uruchom injcode w innym terminalu: $ injcode -m retty
Irssi powinien teraz zostać przeniesiony do drugiego terminala, w tym mając nowy terminal kontrolny.
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.