Yanıtlar:
görev biriktirici size yardımcı olabilir.
Olduğu gibi freshmeat.net :
görev biriktiricisi, biriktirilen görevlerin peş peşe çalıştığı bir Unix toplu iş sistemidir. Bir seferde çalıştırılacak iş miktarı her zaman ayarlanabilir. Her sistemdeki her kullanıcının kendi iş kuyruğu vardır. Görevler herhangi bir kabuktan / işlemden doğru bağlamda (enqueue) çalıştırılır ve çıktısı / sonuçları kolayca izlenebilir. Komutlarınızın çok fazla RAM'e, çok fazla disk kullanımına, çok fazla çıktı vermesine veya her ne sebeple olursa olsun aynı anda çalıştırmamanız daha iyi olur. maksimum fayda sağlamak için kaynaklarınız meşgul. Arayüzü komut dosyalarında kolayca kullanılmasına izin verir.
Görev biriktirici Debian , Ubuntu ve diğer dağıtımlarda mevcuttur.
Çalıştırmak için bir sıraya sahip olmanıza ve çıktılarına yalnızca istek üzerine erişmenize olanak tanır.
Örneğin:
$ tsp sleep 5
0
$ tsp sleep 5
1
$ tsp
ID State Output E-Level Times(r/u/s) Command [run=1/1]
2 running /tmp/ts-out.ZWn6Le sleep 5
1 finished /tmp/ts-out.Fhlcle 0 5.00/0.00/0.01 sleep 5
Arka planda çok fazla iş yaparsanız, kesinlikle size yardımcı olacaktır.
Bunları sırayla veya önceden belirlenmiş miktarda yuvada çalıştırabilirsiniz. (Çalıştırmak Ayrıca görevleri arasında bağımlılıkları kurabilir Task1 yalnızca task0 başarıyla tamamlandı).
Her ikisinde de bunu nasıl yapacağınız aşağıda açıklanmıştır {ba,z}sh
.
Bir işlevi kullanmak, zsh
' monitor
değişkenini ' durumunu kullanarak kaydetmeye ve geri yüklemeye gerek kalmamasına yardımcı olur setopt local_options
.
# Run the command given by "$@" in the background
silent_background() {
if [[ -n $ZSH_VERSION ]]; then # zsh: https://superuser.com/a/1285272/365890
setopt local_options no_notify no_monitor
"$@" &
elif [[ -n $BASH_VERSION ]]; then # bash: https://stackoverflow.com/a/27340076/5353461
{ 2>&3 "$@"& } 3>&2 2>/dev/null
else # Unknownness - just background it
"$@" &
fi
}
Bunu aşağıdaki gibi kullanarak:
trap 'echo child done' CHLD
silent_background sleep 1
Beklenen child done
mesajı üretecektir .
Komut çıkışının yeniden yönlendirilmesi, bir iş zaman uyumsuz olarak başlatıldığında bildirim kabuk tarafından gönderildiği için önemsiz görünüyor . Daha doğrusu, iş kontrolü ile ilgili bir kabuk özelliğidir (fonctionality) .
Burada, "Bash Referans Kılavuzu", "İş Kontrolü" bölümü, birinci bölümden gelen bir alıntı.
Kabuk, bir JOB'u her bir boru hattı ile ilişkilendirir. Şu anda yürütülen işleri
jobs
komutla birlikte listeleyen bir tablo tutar . Bash bir işi eşzamansız olarak başlattığında, şuna benzer bir çizgi yazdırır:[1] 25647
bu işin 1 numaralı iş olduğunu ve bu işle ilişkili ardışık düzendeki son işlemin işlem kimliğinin 25647 olduğunu gösterir. Tek bir ardışık düzendeki tüm işlemler aynı işin üyeleridir. Bash, iş kontrolünün temeli olarak JOB soyutlamasını kullanır.
Kabuk betiğinin bu bildirimi görüntülemediğini unutmayın.
$ cat test
#!/bin/bash
true & echo true
$ ./test
true
Zsh belgeleri bu bildirimler hakkında benzer endikasyonlar sağlar, bkz man 1 zshmisc
. Bölüm "İŞ". Zaman Bu bildirimler gösterilmez iş kontrolü devre dışı bırakılır.
MONİTÖR ( -m , ksh: -m )
İş kontrolüne izin ver. Etkileşimli kabukta varsayılan olarak ayarlanır.
zsh_prompt % setopt no_monitor
zsh_prompt % true & echo true
true
zsh_prompt %
zsh_prompt %
Görünüşe göre Bash her zaman görüntüler [1] 25647
. "Son bildirim" örn. [1]+ Done true
, İş kontrolü devre dışı bırakıldığında görüntülenmez.
bash_prompt $ true & echo true
[1] 25647
true
bash_prompt $
[1]+ Done true
İş kontrolü devre dışı
bash_prompt $ set +m # disable job control
bash_prompt $ true & echo true
[1] 25685
bash_prompt $
bash_prompt $
Bildirimleri gizlemek için iş kontrolünü devre dışı bırakmanın iyi bir şey olup olmadığını bilmiyorum ?
man 1 zshmisc
, bölüm İŞLER.man 1 zshoptions
.Aşağıdaki örneğe bakın:
trap 'echo "DONE"' 0
{ find /usr & } &> /dev/null
wait
İyi çalışıyor. Gerek yok ( )
: bu gerekli olmayan bir alt kabuk yapar. { }
sadece gruplama komutlarıdır.
[2] 49591
ve [2] + 49591 exit 1 find /usr
ne zaman ne basması gerektiğini!
Bu eski bir sorudur, ancak olası bir cevap (bash'de, zsh ile test edilmemiştir) iş kontrolünü alt kabukta kullanmaktır: (command & wait)
Not: bash, alt kabuktaki başlangıç / bitiş arka plan iş iletilerini bastırır ve yeniden yönlendirmeye gerek yoktur.
(sleep 5 & wait)
5 saniye geciktirir.