Ö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 killile sudo killve 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 SystemUIServerveya 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.
sudoişlem bana ait olsa bile), hiçbir değişiklik yapmadan. Will killall SystemUIServerpencere pozisyonlarını unutmadan gibi benim diğer açık uygulamalardan herhangi birini etkileyecek?
kill -lSIGQUIT ve -9 SIGKILL'dir (“yakalanamaz, göz ardı edilemez öldürme”).
man killhepsini görmek için (şimdiye kadarki en iyi 10 UNIX komutunda bulunan) komutunu çalıştırın .
Zorla sonlandırma penceresi killallve killtümü gönderme işlemi varsayılan olarak TERM sinyallerini işler. Bu killall -killiş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 killve diğer yöntemlerin çalışmadığı durumlar yaşadım ve Mac'im bu yüzden kapanamadı.
Bu durumda, sudo shutdown -r nowhiç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 Quitne de kill. Süreç olarak çağırdılar zombie.
İşte zombieiki 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) Zbayrağı görürsünüz , ne anlama geliyor zombie.
Herhangi bir killsinyal 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