Eşzamansız kabuk komutları


101

Bir komutu başlatmak için bir kabuk komut dosyası kullanmaya çalışıyorum. Ne zaman / nasıl / neden bittiği umurumda değil. İşlemin başlamasını ve çalışmasını istiyorum, ancak hemen kabuğuma geri dönebilmek istiyorum ...


2
İlgili, Unix ve Linux Stack Exchange'de nohup, disown ve & arasındaki farka bakın .
jww

1
Arasındaki farklar hakkında görüşmeler bir daha derinlemesine cevap arayanlar için nohup, &vedisown , dördüncü cevap kaydırma için buraya tıklayın .
noɥʇʎԀʎzɐɹƆ

Yanıtlar:


117

Komut dosyasını arka planda çalıştırabilirsiniz:

$ myscript &

Bunun &senaryonuzun içine koymaktan farklı olduğunu unutmayın, ki bu muhtemelen istediğinizi yapmayacaktır.


1
Kolay bir şey olacağını biliyordum, çok teşekkürler ... Linux benim işim değil, ama hızlanmaya çalışıyorum ... Btw, bu nohup ile birleştiğinde işe yarayacak mı?
LorenVS

2
& Komutunu komut satırına koymakla komut dosyasına koymak arasındaki fark nedir? Farklı olduklarının farkında değildim.
Jacob Sharf

8
@JacobSharf, bir dene ve göreceksin. Eğer, &komut dosyası içindeyse ve bir a sahip değilseniz wait, arka plan komutu komut dosyası çıkınca öldürülür.
Carl Norum

oh. Bu birçok şeyi açıklıyor. Son zamanlarda bunun neden olabileceği bazı etkiler fark ettim. Googling, aslında beni bu sayfaya yönlendiriyor. Teşekkürler
Jacob Sharf

Eğer myscript, değiştirmektedir terminali çevre, ex. Bu hemen gerekli olmayan ve geciktirilebilen bir terminal başlatma komutudur, yine de terminal ortamını değiştirecek mi?
noɥʇʎԀʎzɐɹƆ

58

Herkes unuttu disown. İşte özet:

  • & işi arka plana koyar.

    • Giriş okumayı denemeyi engelliyor ve
    • Kabuğun tamamlanmasını beklememesini sağlar.
  • disown süreci kabuğun iş kontrolünden kaldırır, ancak yine de terminale bağlı bırakır.

    • Sonuçlardan biri, kabuğun ona a göndermemesidir SIGHUP(eğer kabuk bir a alırsa SIGHUP, aynı zamanda SIGHUPişleme bir de gönderir, bu da normalde sürecin sonlanmasına neden olur).
    • Ve tabii ki, yalnızca arka plan işlerine uygulanabilir (çünkü bir ön plan işi çalışırken giremezsiniz).
  • nohupsürecin uçbirimle olan bağlantısını keser, çıktısını yeniden yönlendirir nohup.outve onu korur SIGHUP.

    • İşlem gönderilen hiçbiri almayacak SIGHUP.
    • İş kontrolünden tamamen bağımsızdır ve prensipte ön plan işler için de kullanılabilir (bu çok kullanışlı olmasa da).
    • Genellikle &(arka plan işi olarak) ile kullanılır.

disownDebian veya OS X'te bulamıyorum . Bunun bir program olduğunu düşünmüştüm, ancak yanılmışım gibi görünüyor. Bu ne?
jww


6
Bu en iyi cevap. En kapsamlı.
noɥʇʎԀʎzɐɹƆ

3
Kesinlikle en iyi cevap, neden bu kadar küçük olduğunu bilmiyorum
HeberLZ

1
@VladGanshin Hayır.
Ani Menon

40
nohup cmd

terminali kapattığınızda takılmaz. çıktı varsayılan olarak nohup.out'a gider

Bunu arka planla birleştirebilirsiniz,

nohup cmd &

ve çıktıdan kurtulun,

nohup cmd > /dev/null 2>&1 &

ayrıca disownbir komut da verebilirsiniz . yazın cmd, Ctrl-Z, bg,disown


2
Her şeyin nasıl birleştiği harika, çılgınca, sanırım ilk başta sipariş bana ulaşır, ama sanırım bunu ezberleyebilirsiniz (yazdıklarınızı veya "nohup cmd &> / dev / null 2> & 1" :))
LorenVS

Bu gece buna tökezledim. 2 gündür bir kabuk komut dosyasıyla savaşıyorum ve bu öneri işe yaradı. Çok teşekkür ederim!
JD Long

Harika, bu çok kullanışlı. Arka plan modunda çalışırken, komut çıktısını kullanırken arada bir kontrol edebilirsiniz tail nohup.out, bu komut çıktısının son 10 satırını gösterecektir. Bunu şu anda hangi dosyada olduğunu görmek için rsync yedekleme işleri için kullanıyorum.
Martin Hansen

Ya bunu yaparsam ama arka plan sürecini durdurmak istersem?
Stephan Bijzitter

Kabuk, tam olarak bu amaç için bir işe başladığınızda bir iş tanımlayıcısı yazdırır. İle çalışan işlerinizi istediğiniz zaman görebilirsiniz jobs.
üçlü

26

Alternatif olarak, programı çalıştırdıktan sonra, Ctrl-Z tuşlarına basarak programı durdurabilir ve ardından şunu yazabilirsiniz:

bg

bu, son durdurulan programınızı arka plana koyar. (Bir şeyi '&' olmadan başlattıysanız ve yine de yeniden başlatmadan arka planda istiyorsanız kullanışlıdır)


2
Teşekkürler, bu harika bir numara ... Kabuğun iyiliğinin bir kısmını gerçekten takdir
etmeye başlıyorum

3

screen -m -d $command$Komutu ayrı bir oturumda başlatır. screen -rBaşlatılan oturuma eklemek için kullanabilirsiniz . Uzaktan oturumlar için de son derece yararlı olan harika bir araçtır. Daha fazlasını okuyun man screen.


@LadenkovVladislav RedHat'a ekran yükleyebileceğinizden% 95 eminim. CentOS kullanıyorum.
BuvinJ

Ubuntu'da, Windows / toplu iş "start" komutunu taklit etmek istedim. Yani eşzamansız olarak bir ön plan (gui) programını başlatın ve bir kabuk betiği ile devam edin. Bu tam olarak bunu yapar.
BuvinJ
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.