Geçerli komutu ayrılabilir bir oturuma aktarın (tmux / screen)


41

Şu anda bir yedekleme yapıyorum ve şimdi tmuxveya benzeri bir ayrılabilir dosyaya aktarılması gerekiyor screen. Komut şu anda çalışırken bunu yapmanın bir yolu var mı?

Artalanı Ctrl+ tuşlarına basarak gönderebilir ve bir komut vererek Zonu geri koyabilirim fg. fakat terminalden çıktığımda bu oturumun geri dönüp dönmeyeceğini bilmiyorum.


1
Bunu yapmanın yolu yok. Komutu ekrandan (veya diğer) bir oturumun içinden çıkarılabilir olması için başlatmalısınız.
Dan D.,

Yanıtlar:


45

Bu, çoğu zaman çalışır:

Önkoşullar: sahip reptyrve tmux/ screenyüklü; platformunuza bağlı olarak apt-getveya ile onları bulabileceksiniz yum.

  1. İşlemi askıya almak için Ctrl+ kullanın Z.

  2. İşlemi arka planda devam ettir bg

  3. Arka plan işleminin işlem kimliğini bul jobs -l

    Buna benzer bir şey göreceksiniz:

    [1]+ 11475 Stopped (signal) yourprocessname
    
  4. İşi şu andaki üst öğeden (kabuk) ile disown yourprocessname

  5. Başlat tmux(tercih edilir) veya screen.

  6. İşlemi reptyr ile tmux/ screenoturumuna yeniden bağlayın:

    reptyr 11475
    
  7. Şimdi multiplexer ayırmak (varsayılan olabilir Ctrl+ B, Diçin tmux, ya Ctrl+ A, Diçin screensüreç devam ederken) ve ayırma SSH tmux/ ' screen.

  8. Daha sonra tekrar SSH ile bağlandığınızda, çoklayıcıya (örneğin tmux attach) takabilirsiniz .


2
Maalesef koşulduktan sonra sudo reptyr 1430hâlâ alıyorum: "... [-] Çocuğun kafasını açamıyorum. Pideye eklenemiyor 1430: İzin reddedildi"
Daryl Spitzer

3
Durumunuzda -L seçeneği ile örneğin reptyr -L 1430 ile biraz başarı elde edebilirsiniz.
cgseller

1
Gerektiğinde bunu çalıştırın:echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Yanhao

Ayrıca yo yo üzerinde Arch üzerinde: archlinux.org/packages/community/i686/reptyr (apt-get veya yum değil)
Tommy

1
Daha sonra bg, işlem arka planda çalışıyorjobs olmalı, bunun Runningyerine söylemelisiniz Stopped.
G-Man

2

reptyr iyidir ama izin hatası aldım

$ reptyr 30622

[-] Unable to open the tty in the child.
Unable to attach to pid 30622: Permission denied

Sonra bulundu
-L Like '-l', but also redirect the child's stdio to the slave.

hangi bir cazibe gibi çalıştı

$ reptyr -L 30622
Opened a new pty: /dev/pts/4

2
Ben eklediğimde -Lsizinki gibi bir mesajım var Opened a new pty: /dev/pts/6ama askıya topalınmışım tmux'ta görünmedi. burada neyi özlüyorum?
Mehrad Mahmoudian

-1

Bu komut mevcutsa, işi terminalden ayırmak için disown kullanabilirsiniz.

nohup ile çalıştırmak da daha güvenlidir.


biraz daha açıklayabilir misin? Bununla başlamak için ne demek istiyorsun nohup? disowningBir süreç nasıl çalışır?
Darth Android

disown arkaplan işlemini (control-z ile arkaplana koyduğunuz) terminalden ayırır, böylece işlem terminal gittikten sonra devam eder. Eğer komut bulunursa, control-z komutundan sonra disown yazabilirsiniz. ancak bu teoride olduğu gibi güvenilir bir şekilde çalışmayabilir. bir dahaki sefere terminalinizin güvenli bir şekilde çıkabilmesi için programınızın önüne nohup ekleyerek daha güvenlidir.
johnshen64

Bahsettiğim gibi, 'itibarsızlığı' oldukça güvenilmez buldum. Nohup gerçekten çok daha iyi değil. Ancak reptyr bir çözüm olabilir. github.com/nelhage/reptyr
anastrophe

Bu soruya cevap vermiyor. Sorun sadece "yedeği öldürmeden terminali nasıl kapatırım" değil, "daha sonra nasıl devam ettiririm" dir. Doğru cevabın "yapamazsın" olduğu.
Gabe

Burada olası bir anlamsız anlaşmazlık görüyorum ve bu, 'yer değiştirebilir', 'pozisyondan bağımsız', 'tmux'yu ayır' vb. Gibi anahtar kelimeler için oldukça popüler bir arama sonucudur. Programı durdurup devam ettirmek arasındaki farklı hafıza eşlemesi nedeniyle "yapamazsınız" mı demek istediniz? Bir yedekleme programı yalnızca hangi dosyaların hangi dosya yapısına göre yedekleneceğini bilecektir ve dosya yapısı gelecekte bu fiziksel belleği haritalandırılabilir kılmak için var olacaktır. (Olmadığı durumlar için yedekleme yapıyoruz!)
John P
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.