Linux'ta ortaya çıkan son arka plan görevini nasıl sonlandırırım?
Misal:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
Linux'ta ortaya çıkan son arka plan görevini nasıl sonlandırırım?
Misal:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
Yanıtlar:
Bash'de bunun için özel bir değişken var:
kill $!
$! arka planda yürütülen son işlemin PID'sine genişler.
^Z
işleri arka planda tutmaz, onları durdurur. Bir sonraki bg
gerçek 'arka planı' yapar (arka planda yürütmeyi sürdürür) ve bundan sonra $!
beklendiği gibi çalışır.
????
bir veya daha fazla komutun yerine getirileceğini varsayarak, bu komutlardan herhangi biri arka plan işlemi tarafından yapılan işe dayanıyorsa, arka plan işleminin daha sonra bir sinyal işleyicide gerçekleştirebileceği temizleme veya bitirme görevlerine dikkat edin. bir (yakalanabilir) sinyal alma. Bu tür 'bağımlı' komutların ilkinden hemen önce a wait
(ardından belki a sync
veya hatta a sleep <n>
) eklemek en iyisidir.
İş numarasına göre öldürebilirsin. Arka plana bir görev koyduğunuzda şöyle bir şey göreceksiniz:
$ ./script &
[1] 35341
Bu [1]
iş numarasıdır ve şu şekilde referans gösterilebilir:
$ kill %1
$ kill %% # Most recent background job
İş numaralarının bir listesini görmek için jobs
komutu kullanın. Daha fazlası man bash
:
Kabuktaki bir işe gönderme yapmanın birkaç yolu vardır. Karakter
%
bir iş adı sunar. İş numarasın
olarak anılabilir%n
. Bir işe, onu başlatmak için kullanılan adın bir öneki veya komut satırında görünen bir alt dize kullanılarak da başvurulabilir. Örneğin,%ce
durdurulmuş birce
işi ifade eder . Bir önek birden fazla işle eşleşirse, bash bir hata bildirir. Kullanmak ise komut satırında%?ce
dizeyi içeren herhangi bir işi ifade ederce
. Alt dize birden fazla işle eşleşirse, bash bir hata bildirir. Semboller%%
ve%+
Ön plandayken veya arka planda başlatılırken durdurulan son iş olan mevcut işin kabuğunun kavramına bakın. Önceki iş kullanılarak referans verilebilir%-
. İşlerle ilgili çıktıda (örneğin, işler komutunun çıktısı), geçerli iş her zaman a+
ile ve önceki iş a ile işaretlenir-
. Tek bir%
(beraberinde iş belirtimi olmaksızın) mevcut işe de atıfta bulunur.
set -m
) açabileceğinizi düşünmeme rağmen , etkileşimli kullanım için tasarlanmıştır. Stackoverflow.com/questions/690266/…
%1
ve %%
- özellikle. Ctrl-C'de bazı şeyler ölmez, bu yüzden onları Ctrl-Z'ye ve sonra kill -9 %%
. Yararlı bulduğum bir örnek: while true; do mplayer <some unstable online radio>; date >> restarts.log; done
- Ctrl-C sizi bir sonraki döngü yinelemesine götürecektir. Yapmam ps
veya belki yapmadan önce jobs -l
ve sonra sıkıcı olan PID'yi yeniden yazdım .
while true
ile while sleep 1
. Bununla yaşayabilirseniz, yeniden başlamadan önce bu size kısa bir gecikme verecektir ve eğer ctrl-c'ye iki kez basarsanız, ikincisi uykuyu kesecek, sıfır olmayan bir çıkışla sonlandıracak ve döngüden kopacaktır.
Bu, tüm arka plan işlemlerini öldürmelidir:
jobs -p | xargs kill -9
kill -9 %%
daha az
bu konu dışı bir cevaptır, ancak ilgilenenler için değerli olabilir.
@John Kugelman'ın cevabında olduğu gibi,% işin spesifikasyonuyla ilgilidir. bunu verimli bir şekilde nasıl bulabilirim? daha az & desen komutunu kullan , görünüşe göre adam daha az çağrı cihazı kullanıyor (o kadar emin değil), man bash türünde &% sonra Enter sadece '%' içeren satırları gösterecek, tümünü yeniden göstermek için & yazın. sonra Girin.
Killall komutunu kullanın:
Killall taskname
daha fazla bilgi ve daha gelişmiş seçenekler için "man killall" yazın.
killall python
ya killall java
da sistemin başka bir yerinde çalışan yararlı bir şey varken pek yardımcı olmaz .