Przeprowadzam kilka testów długoterminowych skryptów migracji danych za pośrednictwem SSH. Powiedzmy, że zaczynam uruchamiać skrypt około 16:00; teraz biegnie szósta po południu i przeklinam siebie, że nie zrobiłem tego wszystkiego screen
.
Czy jest jakiś sposób na „wsteczną” nohup
procedurę, czy też muszę pozostawić komputer przez całą noc? Jeśli nie można dołączyć screen
do nohup
procesu, który już rozpocząłem, to dlaczego? Ma to coś wspólnego z interakcją procesów rodzic / dziecko? (Nie przyjmuję odpowiedzi „nie”, która przynajmniej nie odnosi się do pytania „dlaczego” - przepraszam;))
disown
. blogs.oracle.com/ksplice/entry/disown_zombie_children_and_theOdpowiedzi:
Jeśli używasz Bash, możesz uruchomić
disown -h job
źródło
disown %1
, jeśli 1 jest jobspec, w przeciwieństwie fg lub bg gdzie wystarczy użyćbg 1
serverwatch.com/tutorials/article.php/3935306/...Użyj reptyr
Z pliku README:
Kilka postów na blogu autora:
źródło
Aby ukraść proces z jednego tty do obecnego tty, możesz spróbować tego hacka:
http://www.ucc.asn.au/~dagobah/things/grab.c
Potrzebuje trochę przeformatowania, aby skompilować do aktualnych wersji Linux / glibc, ale nadal działa.
źródło
Kiedy proces się rozpoczyna, STDIN, STDOUT i STDERR są połączone z czymś . Zasadniczo nie można tego zmienić po uruchomieniu polecenia. W opisywanym przypadku prawdopodobnie jest to tty związane z sesją ssh. nohup po prostu nie robi ...
Oznacza to, że ustawia STDIN na / dev / null, STDOUT na plik, a STDERR na STDOUT. Screen robi znacznie bardziej wyrafinowane rzeczy, polegające na konfigurowaniu tty, które kierują do siebie.
Nie znam żadnego sposobu, aby z mocą wsteczną powstrzymać lub przejrzeć działający proces. Jeśli cd do / proc / $ pid / fd i zobaczysz, na co wskazują 0, 1 i 2.
Możesz mieć szczęście z odrzuceniem, ale nie, jeśli proces spróbuje cokolwiek zrobić przy pomocy STDIN, STDOUT lub STDERR.
źródło
Cryopid jest dalszym rozwinięciem autora grab.c, który zamraża proces do pliku, który następnie uruchamiasz (na ekranie), aby wznowić proces.
źródło
Mogę tylko dać ci proste „Nie” bez powodu, dla której części ekranu, sam byłbym zainteresowany powodem.
Jakkolwiek próbowałeś
disown
(wbudowane bash)źródło
nohup w Solaris / OpenSolaris ma flagę -p, aby nie uruchamiać uruchomionego procesu - na przykład zobacz stronę podręcznika nohup Solaris 10 .
źródło
Niedawno zobaczyłem link do neercs , który jest narzędziem ekranowym zbudowanym przy użyciu libcaca, kolorowej biblioteki ascii-art. Między innymi oferuje możliwość przechwycenia istniejącego procesu i ponownego nadania go w ramach sesji neercs (screen).
Jednak nie użyłem go, więc nie mogę komentować, czy to działa, czy nie.
źródło
Prawdopodobnie nie myślę o tym, więc nie krępuj się mnie poprawić (już dowiedziałem się o disown!) ... Czy kombinacja klawiszy Ctrl-Z i „bg” nie działałaby przynajmniej w celu uruchomienia procesu w tle? A może kluczowym problemem jest to, że nadal chciałbyś widzieć STDOUT podczas działania?
źródło
Jeśli możesz żyć z niemożnością interakcji z procesem i nie sprzeciwisz się ładowaniu losowych modułów jądra, możesz zrobić coś gorszego niż patrzeć na Snoop . Alternatywnie istnieje kilka innych projektów. Oto jedno wywołanie injcode, które może w większości robić to, co chcesz.
źródło
Możesz przekierować dane wyjściowe do pliku za pomocą gdb
https://blog-en.openalfa.com/how-to-detach-from-the-terminal-a-running-process-in-linux
a potem się tego nie zgadza
Aktualizacja: Musiałem uruchomić gdb z sudo i nieco inną komendą gdb w Ubuntu 18.04:
p (int)dup2(open("/tmp/test.stdout", 1), 1)
źródło
Chciałem użyć
nohup
(lub podobnego), aby uruchomićlinks
przeglądarkę wiersza polecenia i dołączyć się do niej po pobraniu pliku ze strony internetowej ASP.NET ze skomplikowanym procesem uwierzytelniania i wieloma stanami ukrytego widoku, które utrudniały wykonanie zadania zcurl
/wget
.W końcu skończyłem z użyciem,
tmux
które rozwiązało pracę po prostu świetnie:tmux
links
w moim przypadku) i pozostaw ją uruchomionątmux attach
aby przywrócić aplikację do ekranuźródło
Czy martwisz się przekroczeniem limitu czasu sesji? W takim przypadku możesz Ctrl-Z i bg proces, a następnie po prostu włożyć coś, co utrzyma sesję przy życiu, np. „Ping -t localhost” lub „top”.
Jeśli chcesz się wylogować, obawiam się, że nie mogę dodać do innych komentarzy.
źródło