Komutu arka planda nasıl ayarlar, terminali kapatır ve fg'ye geri döndürür?


10

Nasıl arka planda bir komut çalıştırmak ve daha sonra ön plana getirmek için bulmaya çalışıyorum. Ben insanların basit olduğunu bildiren öğreticiler ve cevaplar bıktım, sadece &arka planda çalıştırmak için komutun sonuna ekleyin . Sadece tek bir terminal penceresinde çalışıyor. Komutu bir terminalde arka plana koymak ve terminali tekrar açtıktan sonra tekrar ön plana getirmek istiyorum

Misal:

$ grunt &
$ jobs
$ [1]+  Running  grunt &

Tabii ki terminal kapatıldıktan sonra hiç iş bulunamadı.

Sonraki örnek:

$ grunt & disown #the same behavior has: $ setsid grunt &
$ jobs
$ [nothing] #but ps shows that grunt is working

after close terminal, grunt doesn't work

Neyi yanlış yaptım? Birisi bana arka planda komutun nasıl çalıştırılacağını ve ön plana nasıl getirileceğini açıklayabilir mi?

Yanıtlar:


11

İstediğiniz şekilde imkansız.

Bazı temel kavramları gözden geçirelim:

  • Bir süreç grubu, hepsi bir anda sinyal verilebilen ilgili süreçlerin bir koleksiyonudur.
  • Oturum, tek bir terminal aygıtına (kontrol terminali olarak bilinir) veya herhangi bir terminale bağlı olmayan işlem gruplarının bir koleksiyonudur.

Terminali kapattıysanız, başlatma işleminde bildirilenler (cinler) dışında oturumdaki tüm işlemler ölür. Ve onlara tekrar kontrol terminali vermenin bir yolu yok.

Kısacası, POSIX sistemlerinde süreç yeniden oluşturma büyük ölçüde kısıtlanmıştır (arka plana çıkarma bir istisnadır) ve gereksinimleriniz karşılanamaz.


6
Teknik olarak bu doğru cevaptır, ancak bu sorunu yaşayan ziyaretçilerin screen / byobu / tmux'dan bahseden diğer cevaplarda "çözümlerini" bulacağına inanıyorum.
Programcı

Haklısın .., ama benim açımdan, sistemin daha iyi çalıştığını anlamak ve ne istediğini ve yanlış yaptığını anlamak için temel kavramlar daha önemlidir. İkinize de teşekkürler!
Timur Fayzrakhmanov

16
  1. Kurulum screen:

    sudo apt-get install screen
  2. Başlangıç screen:

    screen -S session_name
  3. Komutlarınızı ihtiyacınız olanı yürütün.

  4. screenTerminalden ayırın (komutlarınız hala çalışıyor olacaktır):

    CTRL+ a+ Tuşlarına basınd

  5. Terminali kapatın

  6. Başka bir terminal açın ve son screenoturumu yeniden bağlayın :

    screen -r

Daha fazla bilgi ve ekstra seçenekler için screende görünüm man screen.


2
Ekran veya byobu (özellikle ubuntu kullanıyorsanız). Byobu, doğruysam ekrana dayanıyor, ancak kullanışlı ve kullanımı daha kolay bulduğum ekstra işlevselliğe sahip olduğunu düşünüyorum, ancak bu bir görüş meselesi.
Programcı

Teşekkür ederim iyi öneri! Belki de özelliğe ihtiyaç duyulacak!) Rusya'dan <3
Timur Fayzrakhmanov

@Programster, evet, Byobu eski. ekran. Hem byobu-ekranı hem de byobu-tmux'u vardır.
user.dz

1
tmuxAlternatif olarak tavsiye ederim screen.
gerrit

5

Denediniz mi: byobuya tmuxda terminal çoklayıcıları. Tam olarak aradığınız şey değil, ama benzer bir davranışa sahip.

byobu-screen

Ardından, ayırmak için komutunuzu çalıştırın:

byobu-screen -d

Devam etmek için:

byobu-screen -r

Bkz. Https://help.ubuntu.com/community/Screen


Bunlar da +1.
falconer
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.