Durdurulmuş işler var (bash çıkışında)


157

There are stopped jobs.Bazen bir bash kabuğundan çıkmaya çalıştığımda mesajı alıyorum. İşte python 2.x'te tekrarlanabilir bir senaryo:

  • ctrl+ c, bir istisna olarak tercüman tarafından ele alınır.
  • ctrl+ z'durur' süreci.
  • ctrl+ d, gerçekler için python'dan çıkar.

İşte bazı gerçek dünya terminal çıkışı:

example_user@example_server:~$ python
Python 2.7.3 (default, Sep 26 2013, 20:03:06) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

ctrl+z

[1]+  Stopped                 python
example_user@example_server:~$ exit
logout
There are stopped jobs.

Bash çıkmadı exit, bash kabuğundan çıkmam gerekiyor .

  • S: 'Durdurulan iş' nedir veya bunun anlamı nedir?
  • S: Durdurulmuş bir işlem devam ettirilebilir mi?
  • S: İlk önce exitdurdurulan işleri öldürüyor mu?
  • S: İlk defa kabuktan çıkmanın bir yolu var mı? ( exitiki kez girmeden )

ctrl + shift + \ ayrıca python çıkışını da yapar.
ThorSummoner

Yanıtlar:


205

Durdurulan bir iş geçici olarak arka plana yerleştirilmiş ve artık çalışmıyor, ancak hala kaynakları kullanıyor (örn. Sistem belleği). Bu iş mevcut terminale bağlı olmadığı için çıktı üretemez ve kullanıcıdan girdi alamaz.

Yaptığınız işleri jobsbash, muhtemelen başka mermilerdeki bash komutunu kullanarak görebilirsiniz . Örnek:

user@mysystem:~$ jobs
[1] + Stopped                python
user@mysystem:~$ 

Durdurulan bir işi fg(ön plan) bash yerleşik komutunu kullanarak devam ettirebilirsiniz . Durdurulmuş birden fazla komutunuz varsa, komut satırında jobspec numarasını ileterek hangisinin devam edeceğini belirtmelisiniz fg. Yalnızca bir program durdurulursa, fgtek başına kullanabilirsiniz :

user@mysystem:~$ fg 1
python

Bu noktada python yorumlayıcısına geri döndünüz ve control-D kullanarak çıkabilirsiniz.

Buna karşılık, killkomutu bunun jobspec veya PID ile yapabilirsiniz. Örneğin:

user@mysystem:~$ ps
  PID TTY          TIME CMD
16174 pts/3    00:00:00 bash
17781 pts/3    00:00:00 python
18276 pts/3    00:00:00 ps
user@mysystem:~$ kill 17781
[1]+  Killed                  python
user@mysystem:~$ 

Jobspec'i kullanmak için, sayıdan önce yüzde (%) tuşunu kullanın:

user@mysystem:~$ kill %1
[1]+  Terminated              python

Durdurulan işlerle bir çıkış komutu verirseniz, gördüğünüz uyarı verilir. İşler güvenlik için koşuya bırakılacak. Bu, durduğunuzu unutmuş olabileceğiniz işleri öldürmeye çalıştığınızın farkında olduğunuzdan emin olmak içindir. Exit komutunu kullandığınızda ikinci kez işler sonlandırılır ve kabuk çıkar. Bu, bu şekilde öldürülmesi amaçlanmayan bazı programlar için sorunlara neden olabilir.

Kısaca, logoutdurduran işlemleri sonlandıracak ve çıkacak komutu kullanabilirsiniz . Bu istenmeyen sonuçlara neden olabilir.

Ayrıca, bu şekilde sonlandırıldığında bazı programların çıkmayabileceğini ve bunun bir alışkanlık haline getirilmesi durumunda sisteminizin kaynakları kullanan bir çok yetim süreçle sonuçlanabileceğini unutmayın.

Kullanıcı girişi gerektiriyorsa duracak bir arka plan işlemi oluşturabileceğinizi unutmayın:

user@mysystem:~$ python &
[1] 19028
user@mysystem:~$ jobs
[1]+  Stopped                 python

Ctrl-zKesinti ile durduğun işleri yaptığın gibi bu işleri devam ettirebilir ve öldürebilirsin .


4
İkinci cümle ile kelime oyunu. Bu “iş olduğundan, demeliyim durdu , o alamaz herhangi bir eylem. - dosyasını I / O, ağ I / O terminal I / O veya başka herhangi bir işlem”
Scott

2
Bu bana çok yardımcı olur.
shellbye

Herhangi biri için mükemmel yazı büyük yardım!
George Udosen

18

S: 'Durdurulan iş' nedir veya bunun anlamı nedir?

Durdurulan iş , klavyeden durma sinyali ( SIGSTOP/ SIGTSTP) (askıya alma karakteri Ctrl-Z), komut (örn. kill -STOP [PID]) Veya başka bir işlem (örneğin, sistemde kaynaklar yetersiz olduğunda çekirdek) alan ve duraklatılmış durumda olan, yani sisteme durmasını / askıya alınmasını söyleyen işlem anlamına gelir. Bir işlem, böylece herhangi bir yürütme / işlem yapmaz.

Aktif kabuk işleri tarafından sıralanabilir: jobs.

S: Durdurulmuş bir işlem devam ettirilebilir mi?

Durdurulan işlem yalnızca SIGCONTsinyal gönderilirse yürütülmesine devam eder . Bu, işi mevcut iş yapan ön plana taşıyacak fg(veya fg ID) bg, arka planda devam ettirmek veya SIGCONTsinyal (örn. kill -CONT [PID]) Göndererek elde edilebilir .

S: İlk çıkış durdurulan işleri öldürüyor mu?

İlk yazdığınız zaman exit/ logoutveya basın Ctrl-D, kabuk baskılar sizin terminali ile ilişkili geçerli aktif işler hakkında bir uyarı mesajı, bu nedenle eylem ikinci kez onaylayarak izniniz olmadan o öldürmez. Eğer checkjobsseçeneği (etkindir shopt -s checkjobs), aynı zamanda onların durumları ile işlerini listeler olabilir.

S: İlk defa kabuktan çıkmanın bir yolu var mı? (iki kez çıkışa girmeden)

Ctrl+Dİki kez basabilir veya daha uzun süre basılı tutabilirsiniz; bu, mevcut durdurulan / çalışan shel işlerini çabucak öldürürken kabuktan sessizce çıkacaktır.

Alternatif bunları inkâr ( disown) onları bırakmak veya manuel onları öldürmek: kill $(jobs -p).

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.