Przenoszenie już uruchomionego procesu do ekranu

222

Moja praca biurowa rutynowo sprawia, że ​​jestem podłączony do Linux-a przez VNC.

Czasami uruchamiam zdalne zadanie na konsoli i później uświadamiam sobie, że działa ono znacznie dłużej niż oczekiwano. (Powinien był zacząć od tego pod Screen w pierwszej kolejności ...)

Nie chcę, aby moja stacja robocza działała przez noc, tylko po to, aby sesja VNC była otwarta; Chciałbym przenieść to już uruchomione zadanie zdalne do sesji ekranowej (na zdalnym urządzeniu), aby móc wyłączyć stację roboczą (i ponownie połączyć się następnego dnia rano).

Jak można to zrobić, jeśli w ogóle?

DevSolar
źródło
2
i jest to duplikat, serverfault.com/questions/49877/… - wydaje się, że nie da się tego zrobić.
Paul Dixon,
Wyszukaj skrypt screenify.
Vashu

Odpowiedzi:

217

Zobacz reptyr , który właśnie to robi. Strona github zawiera wszystkie informacje.

reptyr - Narzędzie do „ponownego pisania” programów.

reptyr to narzędzie do pobierania istniejącego programu i dołączania go do nowego terminala. Rozpoczął długotrwały proces nad ssh, ale musisz odejść i nie chcesz go przerywać? Po prostu uruchom ekran, użyj reptyr, aby go złapać, a następnie zabij sesję ssh i idź do domu.

STOSOWANIE

reptyr PID

„reptyr PID” pobierze proces o identyfikatorze PID i załączy go do bieżącego terminala.

Po dołączeniu proces pobierze dane wejściowe i zapisze dane wyjściowe w nowym terminalu, w tym ^ C i ^ Z. (Niestety, jeśli będziesz to robił w tle, nadal będziesz musiał uruchomić „bg” lub „fg” w starym terminalu. Prawdopodobnie nie jest to możliwe do naprawienia w rozsądny sposób bez łatania powłoki).

DaveJohnston
źródło
22
Jeśli, tak jak ja, spojrzałeś na powyższy link i krótko zastanowiłeś się nad instalacją programu ze źródła, nie przejmuj się apt-get: w systemach Debian jest to daleko.
mlissner
3
Działa to świetnie, jak mogłem tego wcześniej nie widzieć?
deed02392,
3
To jest niesamowite! Głosowałbym za tym 10 razy, gdybym mógł! Reptyr jest również dostępny w repozytoriach RedHat. Po prostu „mniam zainstaluj”, aby go zdobyć.
Mark J. Bobak
5
Nie działa, z wyjątkiem najbardziej trywialnych przypadków:Unable to attach. (This most commonly means that 11690 has a suprocesses)
Mehrdad
2
Przynajmniej jako root możesz użyćreptyr -T PID
ChristophK
45

Nie możesz tego łatwo zrobić. Sugeruję, aby nawyk uruchamiania ekranu był pierwszą rzeczą, którą robisz po otwarciu konsoli.

Jednak w przypadku rzeczywistego problemu możesz spróbować jeszcze raz: po uruchomieniu pracy z terminala zrób to w tle, naciskając ctrl-z, a następnie bg. Następnie odłącz zadanie od jego powłoki macierzystej; w bash zrobiłbyś disown -h %<jobid>. Następnie możesz bezpiecznie zamknąć terminal, a zadanie będzie kontynuowane.

hrabia
źródło
3
To zadziałało bardzo dobrze w moim przypadku. reptyr i retty nie mogły pobrać tego procesu, ale wszystko, czego potrzebowałem, to móc zamknąć terminal i pozostawić proces do uruchomienia.
STW,
10
FYI: po odrzuceniu procesu można go powtórzyć wewnątrz ekranu .
Adam
1
To zabiło mój uruchomiony program :(
Mehrdad
39

Kiedy używasz Linuksa, co powiesz na używanie retty w nowo uruchomionym procesie ekranu?

$ screen -S my_process
$ retty $(pgrep my_process)
/redraw

HTH

Twoje zdrowie,

Rob Wells
źródło
1
Nie wiedziałem o retty, dzięki. Jednak w przypadku długotrwałych zadań, które mam na myśli, trochę niechętnie używam narzędzia, które określa się jako „bardzo lekko przetestowane”. Idę z rozwiązaniem Earla.
1
nie patrz retty w Gentoo
Siergiej
nie można dołączyć do 4858
Arnold Roa