Ölmeyecek bir uygulamam var: rıhtımdan gitti, ama pencere kaldı (eğer bir fare ile oynanırsa). CPU kullanmıyor, ama ben gitmesini istiyorum.
Gerçekten bir uygulamayı gerçekten öldürmek için "Çıkma Gücü" nden daha güçlü bir şey var mı ?
Ölmeyecek bir uygulamam var: rıhtımdan gitti, ama pencere kaldı (eğer bir fare ile oynanırsa). CPU kullanmıyor, ama ben gitmesini istiyorum.
Gerçekten bir uygulamayı gerçekten öldürmek için "Çıkma Gücü" nden daha güçlü bir şey var mı ?
Yanıtlar:
Uygulamanın adını biliyorsanız, hala orada çalışıp çalışmadığını görmek için Aktivite İzleyicisi'ne göz atabilir ve Zorla Çıkmayı deneyebilirsiniz. Bu işe yaramazsa, uygulamanın işlem kimliğini (ödeme) not alın. Terminal'e gidin ve kill [pid]
"[pid]" yerine daha önce not ettiğiniz numarayı yazın. Bu işe yaramazsa, deneyin kill -3 [pid]
ve işe yaramazsa deneyin kill -9 [pid]
. Süreç (bu olası değildir) farklı bir kullanıcı tarafından aitse, değiştirmek gerekebilir kill
ile sudo kill
ve istendiğinde şifrenizi yazın.
Uygulama Aktivite İzleyicisi’nde görünmüyorsa veya kullanamıyorsanız kill
, pencere başka bir yerde kalmış kalmış olabilir ve uygulama artık çalışmıyordur. Bu durumda, bazen (her zaman değil) çalışabilir killall SystemUIServer
veya killall Dock
.
Bunların hiçbiri işe yaramazsa, oturumu kapatıp tekrar açmanız veya yeniden başlatmanız gerekir. Birkaç kez bu noktaya geldiğimde, uygulama o kadar sıkıştı ki oturumu kapatmayı veya kapatmayı engelledi, bu yüzden yeniden başlatmak zorunda kaldım.
sudo
işlem bana ait olsa bile), hiçbir değişiklik yapmadan. Will killall SystemUIServer
pencere pozisyonlarını unutmadan gibi benim diğer açık uygulamalardan herhangi birini etkileyecek?
kill -l
SIGQUIT ve -9 SIGKILL'dir (“yakalanamaz, göz ardı edilemez öldürme”).
man kill
hepsini görmek için (şimdiye kadarki en iyi 10 UNIX komutunda bulunan) komutunu çalıştırın .
Zorla sonlandırma penceresi killall
ve kill
tümü gönderme işlemi varsayılan olarak TERM sinyallerini işler. Bu killall -kill
işe yaramazsa kullanabilirsiniz .
Killall aracı, kill (p) tarafından yapılan seçimlerin aksine, adı ile seçilen işlemleri öldürür. Varsayılan olarak, procname adıyla eşleşen, killall'ın ismiyle aynı olan gerçek bir UID ile tüm işlemlere bir TERM sinyali gönderir. Süper kullanıcının herhangi bir işlemi öldürmesine izin verilir.
sudo dtrace -n 'proc:::signal-send /pid/ { printf("%s -%d %d",execname,args[2],args[1]->pr_pid); }'
Zorla çıkma penceresinden bir uygulamayı çalıştırıp çıkarsanız, sinyal genellikle -15 (TERM) olarak gösterilir. Ancak, Aktivite İzleyiciden bir arka plan işleminden (veya Dock'ta gösterilmeyen bir uygulamadan) vazgeçtiğinizde, sinyal genellikle -9 (KILL) olarak gösterilir.
SIGTERM, öldürme veya öldürme komutları tarafından bir işleme gönderilen varsayılan sinyaldir. Bir sürecin sonlandırılmasına neden olur, ancak SIGKILL sinyalinin aksine, işlem tarafından yakalanabilir ve yorumlanabilir (veya yoksayılabilir). Bu nedenle, SIGTERM, işlemlerin güzel bir şekilde sonlandırılmasını, dosyaların temizlenmesini ve kapatılmasını sağlayan bir işlem istemeye benzer. Bu nedenle, kapatma sırasındaki birçok Unix sistemlerinde, SIGTERM'i kapatmak için gerekli olmayan tüm işlemlere SIGTERM verir, birkaç saniye bekler ve ardından kalan tüm işlemleri zorla sonlandırmak için SIGKILL verir.
SIGKILL
, uygulama muhtemelen kesintisiz bir uyku modundadır ve yapabileceğiniz hiçbir şey yoktur (yeniden başlatmadan kısa).
Force Quit, Activity Monitor kill
ve diğer yöntemlerin çalışmadığı durumlar yaşadım ve Mac'im bu yüzden kapanamadı.
Bu durumda, sudo shutdown -r now
hiçbir şey olmadığında bir çalışmış ve muhtemelen güç düğmesi üzerinden sert bir şekilde kapatılmasından daha iyidir.
Yukarıdaki cevaplarda olduğu gibi SIGKILL
, herhangi bir işlemi sonlandırmanın en güçlü yolu örn kill -9 process_id
.
Ancak, imkansız ne süreçleri var Force Quit
ne de kill
. Süreç olarak çağırdılar zombie
.
İşte zombie
iki dakikalık bir süreç yaratacak kısa bir senaryo :
perl -e 'if($p=fork) {print "unkillable pid:$p\n" ;system("ps -l"); sleep(120)}'
Yukarıdaki betiği Terminal'de çalıştırın; sıradaki gibi çıktı alın:
unkillable pid:50571
UID PID PPID F CPU PRI NI SZ RSS WCHAN S ADDR TTY TIME CMD
501 47380 47379 4006 0 31 0 2448416 2900 - S 0 ttys000 0:00.36 -bash
501 50570 47380 4006 0 31 0 2443512 1424 - S+ 0 ttys000 0:00.01 perl -e if($p=fork) {print "u
#THIS-> 501 50571 50570 2006 0 0 0 0 0 - Z+ 0 ttys000 0:00.00 (perl)
501 12795 12794 4006 0 31 0 2448296 1752 - S+ 0 ttys001 0:00.75 -bash
501 50123 50122 4006 0 31 0 2448296 2688 - S+ 0 ttys002 0:00.14 -bash
Engellenemez işlem için durum sütununu kontrol ederseniz (bu durumda: 50571) Z
bayrağı görürsünüz , ne anlama geliyor zombie
.
Herhangi bir kill
sinyal göndermeyi deneyebilirsiniz (örn. kill -9 50571
) Ve işlem devam edecektir. Her neyse, sisteminize çok fazla zarar vermez, çünkü aslında yoktur - sadece süreç tablosunu doldurur.
Yukarıdaki örnekte, 120 saniye içinde silinir.
Yapmanız gereken şey bu:
Böyle bir işlem, kaldırma girişiminde bulunacaksanız, en iyi durumda güvenli modda kaldırılır.
Şerefe, Bryan