Yanıtlar:
başladım
while true; do yad; sleep 60; done &
ve test etmek için terminali kapattım, şimdi de aynı sorunu gördüm.
Makinemdeki ps fjx
son satırlarla çalışan işlemlere genel bir bakalım
2226 11606 11606 19337 ? -1 S 1000 0:00 \_ /bin/bash
11606 22485 11606 19337 ? -1 S 1000 0:00 | \_ sleep 10
2226 9411 9411 8383 ? -1 S 1000 0:00 \_ /bin/bash
9411 17674 9411 8383 ? -1 Sl 1000 0:00 \_ yad
1 2215 2215 2215 ? -1 Ss 1000 0:00 /lib/systemd/systemd --user
2215 2216 2215 2215 ? -1 S 1000 0:00 \_ (sd-pam)
yad
Bir alt işlemi olarak görebilirsiniz /bin/bash
, eğer kapatırsam çıktısında yad
değişir . Çok şöyle de çıkış arama yapabilirsiniz kafa karıştırıcı ağaç görünümü ise 1 :sleep 60
ps
ps fjx | grep "[y]ad" # or respectively
ps fjx | grep "[s]leep 60"
Çıkış hatları iki sayıyla başlar, birincisi PPID, ana işlemin işlem kimliği ve ikincisi de PID, işlemin kimliğidir. 9411
Buradaki her iki sırada da görünmesi nedeniyle :
2226 9411 9411 8383 ? -1 S 1000 0:00 \_ /bin/bash
9411 17674 9411 8383 ? -1 Sl 1000 0:00 \_ yad
Bu bash
, öldürmek istediğimiz alt kabuk ve PID'sini yeni öğrendim, yani şimdi kalan her şey basit
kill 9411 # replace 9411 with the PID you found out!
ve sinir bozucu alt kabuk iyi gitti.
1 : Bunun grep "[y]ad"
yerine sadece gösterim grep yad
, grep
işlemin sonuç listesinde görünmesini engeller .
bash
$!
“arka plana en son yerleştirilen işin işlem kimliğine genişleyen” değişkenini sağlar , bu nedenle aşağıdakiler arka plandaki en son işlemi öldürür:
kill $!
Bu en son işlem değilse , jobs
yerleşik, örnek çıktıyla çalışan işlerin bir listesini alabilirsiniz :
[1]- Running while true; do
yad; sleep 60;
done &
[2]+ Stopped sleep 10
Bunlardan birini size iş numarası veya kısayolları ile erişebilirsiniz öldürmek için iş listesinde iki iş vardır %
, %+
( “mevcut iş”) ve %-
arka planda çalışan döngü öldürmek için ( “Önceki iş”), örneğin sen yapabilirdi
kill %1 # or
kill %-
ve askıya alınmış sleep 10
işi öldürmek için :
kill %2 # or
kill %+ # or
kill %
Bu komutu girdiğiniz terminali kapattığınızda, alt komutun bununla birlikte ölmüş olması gerektiğini not etmeliyim. Bunu yeniden üretmeye çalışmak bu davranışı gösterdi.
Şimdi, aslında bunun olmadığı bir durumda olduğunuzu varsayarak &
, komutun sonunda neden olduğu arka planda çalışan bıraktığınız programı öldürmenin bir yolu şöyledir:
echo $$
mevcut PID'inizi (proses ID) not edin, böylece kendi oturumunuzu öldürmezsiniz.ps -ef | grep $SHELL
hangi programların bir kabuk çalıştırdığını bulmak için komutu kullanarak yapabilirsiniz .echo $$
yukarıda sonucu; bu öldürmek istediğin PID.kill -SIGTERM <pid>
Komutu çalıştırın, <pid>
3. adımda tanımladığınız sayısal değer neredeAyrıca oturumunuzu veya bilgisayarınızı yeniden başlatabilirsiniz, ancak yukarıdakiler bundan kaçınmanıza izin verecektir.
Bu &
, terminalin yeni bir işlem yaratmasını ve kodunuzun içinde çalışmasını sağlar. Böylece kodunuz terminal işleminden bağımsız hale gelir. Terminali kapatsanız bile, kodunuzun çalıştığı yeni işlem durmaz. Öyleyse kaldır &
ya da yap ps -aux
, sürecini bul ve öldür kill (process id)
.
Genellikle ön plan için arka plan fg için bg . Eğer & fg sembolünü kullanırsanız, o anki çalışan programı gösterir. Öldürmek için Ctrl + C tuşlarına basın .
bg
/ fg
terminali ayrılmış bir kez çalışmaz bash
. Alt süreçleri ( ) reptyr
olduğundan bash
, kullanarak yeniden bağlayamazdım sleep
.
top
işlemik
, ardından PID'ye girip, ardından iki kez enter tuşuna basarak öldürmek için de kullanabilirsiniz .