Linux'ta sürekli çalışan bir Python betiği nasıl durdurulur


19

Çalışan ve sürekli bir günlük dosyasına hataları damping bir Python komut dosyası var.

Komut dosyasını düzenlemek ve tekrar çalıştırmak istiyorum, ancak komut dosyasını nasıl durduracağımı bilmiyorum.

Şu anda PuTTy aracılığıyla Linux'ta oturum açtım ve orada tüm kodlamaları yapıyorum. Peki, linux'da python betiğini durdurma komutu var mı?

Yanıtlar:


35

İşlem kimliğini (pid) bulmanız gerekecektir. bunu yapmak için bir komut

$> ps -ef

sonuçları python süreçleriyle sınırlamak için sonucu grep

$> ps -ef | grep python

hangi gibi sonuçlar verecektir:

user      2430     1  0 Jul03 ?        00:00:01 /usr/bin/python -tt /usr/sbin/yum-updatesd

ikinci sütun pid'dir. sonra kill komutunu şu şekilde kullanın:

$> kill -9 2430 (i.e. the pid returned)

Tam da aradığım şey buydu. Teşekkür ederim

8

Bu basit satırı deneyin, Hepsini sonlandıracak script.py:

pkill -9 -f script.py

1
Bu, komut dosyası adı benzersizse PID'yi manuel olarak aramaktan çok daha iyidir.
FlippingBinary

7

Komut dosyasının işlem kimliğini (PID) bulun ve kill -9 PIDterminalde forground işleminiz olarak çalışmadığı sürece işlemi öldürmek için bir a düzenleyin; bu durumda Contrl-C'yi öldürebilirsiniz.

Bu komutla PID'yi bulun:

ps -elf | grep python

Tüm python işlemlerini listeler, doğru olanı seçer ve PID'sini not eder. Sonra

kill -9 <whatever_the_PID_is>

süreci öldürecek. Bu aşamada bir işlemi sonlandırmayla ilgili bir mesaj alabilirsiniz.

Alternatif olarak, toppython işlemini bulmak için komutu kullanabilirsiniz . Basitçe k(kill için) girin ve topprogram sizi öldürme sürecinin PID'sini isteyecektir. Bazen ilgilendiğiniz tüm süreçleri görmek zor topolabilir , çünkü ekrandan çıkabilirler, psyaklaşımın daha kolay / daha iyi olduğunu düşünüyorum .


4
Kullanmadan önce -9, onu önce "yumuşak bir şekilde" öldürürdüm. Sadece tepki vermezse kullanırdım -9.
glglgl

"Yumuşak öldürme" terimine aşina değilim
Levon

4

Program kabuğunuzdaki geçerli işlemse, Ctrl-C yazmak Python programını durduracaktır.


Harika bir çözüm, test için buna ihtiyaç vardı.
Kuzon

1

Mükemmel bir dünyada, komut dosyasının belgelerini okur ve sona erdirmek için hangi sinyallerin kullanılması gerektiğini görürsünüz. Gerçek hayatta, muhtemelen TERM sinyalini göndermek istersiniz, öncelikle TERM'i yoksayarsa bir KILL sinyali kullanırsınız. Yani, ps komutunu kullanarak (daha önce açıklandığı gibi) İşlem Kimliğini bulmak. Sonra koşabilirsiniz kill -TERM <pid>. Bazı programlar, böyle bir sinyal aldıklarında açık olabilecekleri dosyalar gibi şeyleri temizler, bu yüzden böyle bir şeyle başlamak daha güzel olur. Başarısız olursa, o zaman çok büyük bir çekiçle dışında yapacak bırakmadı var: kill -KILL <pid>. (sayısal değerleri kullanabilirsiniz, örneğin -KILL = -9 ve muhtemelen hiçbir zaman değişmezler, ancak teorik olarak adları kullanmak daha güvenli olabilir)


0

Komut dosyasının adını biliyorsanız, tüm işleri tek bir komuta azaltabilirsiniz:

ps -ef | grep "script_name" | awk '{print $2}' | xargs sudo kill

Bunun bir python betiği olduğundan emin olmak istiyorsanız:

ps -ef | grep "python script_name" | awk '{print $2}' | xargs sudo kill

Tüm python komut dosyalarını öldürmek istiyorsanız:

ps -ef | grep "python" | awk '{print $2}' | xargs sudo kill

Sanırım fikri anladınız;)

Hatırlatma: Örneklerde olduğu gibi komut dosyasının adını "" belirtmeniz gerekir.

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.