Sunucuda nohup işlemi yürütüyorum. Onu öldürmeye çalıştığımda macun konsolum kapanıyor.
süreç kimliğini nasıl bulmaya çalışacağım:
ps -ef |grep nohup
bu öldürme emri
kill -9 1787 787
Sunucuda nohup işlemi yürütüyorum. Onu öldürmeye çalıştığımda macun konsolum kapanıyor.
süreç kimliğini nasıl bulmaya çalışacağım:
ps -ef |grep nohup
bu öldürme emri
kill -9 1787 787
Yanıtlar:
Kullanırken nohup
ve görevi arka plana koyduğunuzda, arka plan operatörü ( &
) komut isteminde size PID değerini verecektir. Planınız işlemi manuel olarak yönetmekse, bu PID'yi kaydedebilir ve daha sonra gerekirse kill PID
veya yoluyla kill -9 PID
(öldürmeye zorlamanız gerekiyorsa) işlemi öldürmek için kullanabilirsiniz . Alternatif olarak, PID'yi daha sonra bulabilir ve PID'yi ps -ef | grep "command name"
oradan bulabilirsiniz. nohup
Anahtar kelime / komutun kendisinin ps
söz konusu komutun çıktısında görünmediğini unutmayın .
Bir komut dosyası kullandıysanız, aşağıdakine benzer bir şey yapabilirsiniz:
nohup my_command > my.log 2>&1 &
echo $! > save_pid.txt
Bu, my_command
tüm çıktıların kaydedilmesini çalıştıracaktır my.log
(bir komut dosyasında, $!
yürütülen son işlemin PID'sini temsil eder). 2
Standart hata için dosya tanıtıcısı (olan stderr
) ve 2>&1
standart çıktı (dosya tanımlayıcı yönlendirmek standart hata çıktısına kabuk söyler 1
). O gerektirir &1
kabuk yerine adında bir dosyanın bu bağlamda bir dosya tanıtıcı biliyor ki 1
. 2>&1
Normalde bizim içine standart hata yazılır ki tüm hata iletilerini yakalamak için gerekli olan my.log
(standart çıkışından geliyor) dosyası. Kabuk ile G / Ç yönlendirmesini yönetme hakkında daha fazla bilgi için G / Ç Yeniden Yönlendirme konusuna bakın .
Komut çıkışı düzenli olarak gönderirse, çıkışı zaman zaman kontrol edebilir tail my.log
veya takip etmek isterseniz "live" kullanabilirsiniz tail -f my.log
. Son olarak, süreci öldürmeniz gerekiyorsa, bunu şu şekilde yapabilirsiniz:
kill -9 `cat save_pid.txt`
rm save_pid.txt
nohup
PID'yi basan hafif bir açıklama, kendiliğinden değil, &
arka planın son ls &
ls
2
"standart hata" dosya tanımlayıcısıdır. >
kabuk yeniden yönlendirme ve &1
"standart çıktı" dosya tanımlayıcı ( &
kabuk burada adında bir dosyaya atıfta olduğumu düşünmez bu yüzden burada gereklidir 1
). Böylece 2 > &1
herhangi bir standart hata çıkışını standart girişe yönlendirir. > my.log
Standart çıktıyı yönlendirmek için önceki araçlar my.log
olduğundan, hata mesajlarının da gitmesini sağlamak için bir yola ihtiyacımız var my.log
. 2 > &1
bu tür hataların standart çıktıya gitmesini sağlar ve bu da gider my.log
. Bkz. G / Ç Yönlendirme .
echo $!
ortaya çıkan süreç yerine nohup pid'ini veriyor: paste.fedoraproject.org/428697/99695314
&
bir komut sınırlayıcı görevi görür, böylece deneyebilirsiniz sh -c "nohup my_command > my.log 2>&1 & echo $! > save_pid.txt"
. Çalışabilir, ama denemedim.
Bir VPS sunucusunda (ve SSH - macun aracılığıyla) kırmızı şapka linux kullanıyorum, benim için aşağıdakiler çalıştı:
İlk olarak, çalışan tüm işlemleri listelersiniz:
ps -ef
Sonra ilk sütunda kullanıcı adınızı bulacaksınız; Aşağıdaki üç kez buldum:
Sonra ikinci sütunda nohup işleminin PID'sini bulabilirsiniz ve sadece şunu yazabilirsiniz:
kill PID
(PID'nin nohup işleminin PID'si ile değiştirilmesi elbette)
Ve işte bu!
Umarım bu cevap bash ve SSH için çok yeni olduğum biri için yararlı olacaktır, ancak burada ihtiyacım olan bilginin% 95'ini buldum :)
aşağıdaki komutla arka planda yakut komut dosyası çalıştırdığımı varsayalım
nohup ruby script.rb &
sonra komut adını belirterek yukarıdaki arka plan işlemi pid alabilirsiniz. Benim durumumda komut yakuttur.
ps -ef | grep ruby
çıktı
ubuntu 25938 25742 0 05:16 pts/0 00:00:00 ruby test.rb
Artık kill komutunu kullanarak işlemi kolayca öldürebilirsiniz
kill 25938
ps -ef
ve kill
ikisi de yukarıda iyice kaplanmıştı, peki yeni kısım nedir?
Nohup ile bir java programı yürüttüğünüzü varsayalım tarafından java işlem kimliği alabilirsiniz
`ps aux | grep java`
çıktı
xxxxx 9643 0.0 0.0 14232 968 pts/2
o zaman yazarak işlemi öldürebilirsiniz
sudo kill 9643
veya diyelim ki tüm java süreçlerini öldürmeniz gerekiyor
sudo killall java
bu komut tüm java işlemcilerini öldürür. bunu işlemle kullanabilirsiniz. sadece komutun sonunda işlem adını verin
sudo killall {processName}
Django sunucusunu aşağıdaki komutla başlattım.
nohup manage.py runserver <localhost:port>
Bu CentOS'ta çalışır:
:~ ns$netstat -ntlp
:~ ns$kill -9 PID
process not found
karışıklığı nohup ile çözmek için gidilecek yol.
Bugün aynı problemle karşılaştım. Ve uzun zaman önce olduğundan, hangi komutu ne zaman kullandığımı tamamen unuttum. Üç yöntem denedim:
ps -ef
. Bu, işleminize başladığınız zamanı gösterir ve ssh'ı kapatmadan hemen önce komut vermenizden vazgeçmeniz çok olasıdır (size bağlıdır). Ne yazık ki en son komut nohup kullanarak çalıştırdığım komut olduğunu sanmıyorum, bu yüzden bu benim için çalışmıyor.ps -ef
komutta da gösterilen PPID'dir . İşlemi oluşturan sürecin kimliği olan Ana Süreç Kimliği anlamına gelir. Çalıştırmak için nohup kullanan işlem için ubuntu'da ppid 1'dir. Sonra kullanabilirsinizps --ppid "1"
listeyi almak için ve sürecin PID'sini bulmak için TIME (işleminizin kullandığı toplam CPU süresi) veya CMD'yi kontrol edebilirsiniz.lsof -i:port
İşlem bazı bağlantı noktalarını kaplarsa kullanın ve komutu alırsınız. Sonra yukarıdaki cevap gibi, kullanın ps -ef | grep command
ve PID alacaksınız.İşlemin PID'sini bulduktan sonra kill pid
, işlemi terminallemek için kullanabilirsiniz .
nohup
ve daha sonra için kullanmanızkill
veyaps -ef
çıktıdaki komut adına göre işlemi bulmanız ve PID'yi bundan almanız gerekir. Komut adını aramalısınız, değilnohup
.