Komut satırı uygulamalarını doğrudan arka plana nasıl gönderirsiniz?


22

Basmanın uygulamayı durdurduğunu zaten biliyorum ctrl+z, sonra uygulamayı bgkomutla arka plana gönderebilirim , ancak bu, uygulamanın durdurulduğu zamanın kısa bir süresi olduğu anlamına gelir.

Uygulamayı durdurmadan doğrudan arka plana nasıl gönderirim?


Zaten çalışıyorsa, yapamayacağınıza eminim.
Kevin

1
Göreviniz arka plana "kaybolmadan önce" girişinizi gerektiriyorsa, zenity veya yad gibi araçlar kullanabilirsiniz (guis isterseniz). Yine de arka plandan çıktı gönderip alabilirler. Borular ve cihazlarla oynamanın aynı zamanda konsola arka plandan erişmenizi sağlayacağından eminim, ama nasıl yapacağımdan emin değilim.
Joe,

@Joe Bu harika, ama demek istediğim hiç değil. Yalnızca bir uygulamayı duraklatmadan doğrudan arka plana göndermek istiyorum. yani tuşuna basıp ctrl+zardından komutu çalıştırmadan bg. Uygulamayı arka plana göndermek için tek bir tuş vuruşu combo var mı?
trusktr

Yanıtlar:


17

Ön plandan arka plana başvuru göndermek hem terminalden hem de kabuktan işbirliği gerektirir. Terminal tek başına bunu yapamaz, çünkü kabuğun ön plan işlem grubunu ayarlaması gerekir. Kabuk tek başına yapamaz, çünkü terminal tuş basışını işlemelidir (kabuk ön planda değildir, bu nedenle tuş basışını alamaz).

Yakın bir yaklaşım, uygulamayı arka plana gerçekten hızlı bir şekilde göndermektir. Ne de olsa, bir uygulama CPU zamanını başkalarıyla paylaşır ve saniyenin yüzlerce saniyesinin duraklaması önemli olmamalıdır. (Gerçek zamanlı uygulamalar için geçerlidir, bu nedenle arka planda bunları başlattığınızdan emin olun.) En son ön planlanmış işi arka plana gönderen Ctrl+ için bir kabuk ciltleme kullanıyorum Z. Bu şekilde Ctrl+ Z Ctrl+ tuşlarına basmak, Zişi asgari süspansiyon süresiyle arka plana gönderir.

İşte benim zsh bağlayıcım, ayrıca komut satırı boş olmadığında yarı yazılmış bir komutu “arka plan” olarak da ekliyor .

fancy-ctrl-z () {
  emulate -LR zsh
  if [[ $#BUFFER -eq 0 ]]; then
    bg
    zle redisplay
  else
    zle push-input
  fi
}
zle -N fancy-ctrl-z
bindkey '^Z'          fancy-ctrl-z

İngilizce’de, izleyicideki zsh olmayan kullanıcılar için:

  • Aşağıdakileri yapan bir kabuk işlevi tanımlayın:

    • Uzunluğu ise giriş tamponu 0, o anda geçerli olan koyun içinde (son süspansiyon haline getirilmiş veya başlatıldı iş) arka ve yeniden görüntülemek istemi.
    • Aksi takdirde, giriş arabelleğini bir yığına itin ve yeni bir bilgi istemi gösterin. Kullanıcı bir komuta girdiğinde veya Ctrl+ ile iptal ettiğinde C, itilen tampon daha sonraki baskılar için geri getirilir.
  • Bu işlevi Ctrl+ 'ya bağlayın Z.

Komut satırının boş olup olmamasından bağımsız olarak sadece arka plan davranışını istiyorsanız:

function bg_ { builtin bg "$@"; }
zle -N bg_
bindkey '^Z' bg_

Bash de aynı şeyi yapabilir misin bilmiyorum. bind -x '"\C-z": bg'Basty tty stop karakterini yerinde bırakması dışında, bu kadar kolay olmalı , bu yüzden asla girdi olarak Ctrl+ Zalamaz.


İlginç, bakalım bu Bash'de yapılabilir mi? Eğer öyleyse, bu bir çözüm olurdu. Zsh ile aşina değilim. Senaryonuzun ne yaptığını açıklamak ister misiniz?
trusktr

@trusktr Düzenlemeye bakın.
Gilles 'SO- kötülük' dur

Teşekkürler! Zsh'ye geçmek üzereyim. Bu konuda çok iyi şeyler duydum.
trusktr

15

Bir görevi ard arda ekleyerek arka plan yapabilirsiniz &.

Mesela tail -f /var/log/messages &, görevi hemen arka plan olacaktır.

Her zaman olduğu gibi, jobskomutla hangi görevleri planladığınızı görebilirsiniz .

Elbette bu, komutu henüz çalıştırmadığınızı varsayar.


Bu yararlı, ama ne demek istediğimi değil. Uygulamayı ön planda tutarsam, daha sonra arka plana göndermek istiyorsanız, arka planda çalışan uygulamanın komut satırında ctrl+zçalıştırıp tuşuna basabilirim bg. Ancak, basmak ctrl+zve yürütmek arasında bg, uygulamanın tamamen duraklatıldığı bir zaman dilimi vardır. Bunu istemiyorum Hemen arka plana nasıl gönderirim ?
trusktr

@ Gilles gibi dedi trusktr. Hem kabuğu hem de terminali bilgilendirmeniz gerekir. Üzgünüm, bunu yapmanın bir yolunu bilmiyorum.
prateek61

Soruyu cevaplamıyor.
Luciano Andress Martini

4

Komutun arka planlaması, komuta bir işareti ve işareti ekleyerek yapılır.

sleep 300 &

Zaten çalışıyorsa, tek seçeneğiniz durdurmanız ve arkaplan.


Ctrl + z tuşlarına basıp bg yürütme arasında, uygulamanın tamamen duraklatıldığı, istediğim şey olmadığı bir süre var. Yani hemen arka plana göndermenin yolu yok mu?
trusktr

1
Hayır! Giles'in dediği gibi, hem kabuğu hem de terminali alır. Her birini bilgilendirmelisin.
bahamat
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.