Geçerli çalışan Linux sürecini arka plana nasıl koyabilirim? [kapalı]


112

Git kullanarak dosyaları Linux kabuğundan uzak bir sunucuya yükleyen bir komutum var ve tamamlaması saatler alacak.

Çalışan programı arka plana nasıl koyabilirim? Yani hala kabuk üzerinde çalışabilirim ve bu süreç de tamamlanır?


Sadece bir tahmin ama ctrl + z veya komutunuzu bu şekilde çalıştırmayı denediniz mi; #command &
EralpB

Komut zaten çalışıyor, bu yüzden başka seçeneğim yok. Hangi komutu deneyeceğimden emin değilim. Mevcut süreci kırmak istemedim, bu yüzden denemedim
Mirage

O zaman daha profesyonel bir cevap beklemeliyiz :) Demek istediğim her şeye yeniden başlama şansınız olsaydı. (Komut ve şey)
EralpB

Bu soruda kabul edilen cevaplayıcı, atılması gereken üç adımı açıklıyor: stackoverflow.com/questions/625409/…
Leonard Saers

Ayrıca ikinci bir macun örneği açabilir ve başka bir kabuk elde etmek için sunucuya tekrar bağlanabilirsiniz. Çözüm ctrl+zharika olsa da .
Ela782

Yanıtlar:


208

İşlemi CTRL + Z ile askıya alın ve ardından bgarka planda devam ettirmek için komutu kullanın. Örneğin:

sleep 60
^Z  #Suspend character shown after hitting CTRL+Z
[1]+  Stopped  sleep 60  #Message showing stopped process info
bg  #Resume current job (last job stopped)

Kılavuz sayfasında iş kontrolü ve bgkullanımı hakkında daha fazla bilgi bash:

İŞ KONTROL
Yazma askıya karakteri (tipik ^ Z Kontrol-Z) bir süreç süreç durdurulmalı ve döner bash kontrol ettikleri nedenleri çalışırken. [...] Kullanıcı daha sonra arka planda devam etmek için bg komutunu kullanarak bu işin durumunu değiştirebilir [...]. A ^ Z hemen etkili olur ve bekleyen çıktının ve ön yazının atılmasına neden olmak gibi ek bir yan etkiye sahiptir.

bg [ jobspec ...]
Askıya alınan her iş tanımını , sanki & ile başlatılmış gibi arka planda devam ettirin . Eğer jobspec mevcut olmadığı, bir kabuk kavramı geçerli iş kullanılmaktadır.

DÜZENLE

Terminali öldürebileceğiniz ve hala çalışmaya devam ettiği bir işlemi başlatmak için

nohup [command] [-args] > [filename] 2>&1 &

Örneğin

nohup /home/edheal/myprog -arg1 -arg2 > /home/edheal/output.txt 2>&1 &

Çıkışı yok saymak için (çok akıllıca değil) dosya adını şu şekilde değiştirin: /dev/null

Hata mesajını farklı bir dosyaya ayarlamak için dosya adını değiştirin &1.

Ek olarak: Bu jobsarka planda çalışan işlemlerin dizinlenmiş bir listesini görmek için komutu kullanabilirsiniz . Ve arka planda çalışan bir işlemi çalıştırarak kill %1veya kill %2sürecin dizini olan sayı ile öldürebilirsiniz .


denedim ama çıktı olarak, ne kadar verinin yüklendiğini gösteren% ile tekrar ön plana çıktı
Mirage

İşlem, başlangıçta bunu yapma talimatı verdiğinizde herhangi bir çıktıyı terminale yazacaktır. Dosyaya yazmak için çıktı almak için yeniden başlatmanız gerekecek veya /dev/null. Yukarıdaki düzenlemeye bakın.
Ed Heal

Yani bu, eğer süreç zaten başlamışsa çıkışı yeniden yönlendirmenin mümkün olmadığı anlamına gelir
Mirage

Evet kesinlikle. Süreci sadece çalıştırdığı kabuğu etkileyemezsiniz. Bir yapabilirsiniz kill -9 <pid of your shellve sonra işlem hala çalışacak ve çıktı atılacaktır - ancak yeni bir kabuk başlatmak için tekrar oturum açmanız gerekecektir.
Ed Heal

disownTerminal oturumunuzdan çıkmanız gerekiyorsa ve çalışmaya devam etmesini istiyorsanız komutu da kullanabilirsiniz .
kirk roerig
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.