Apakah ada sesuatu yang lebih kuat dari "Force Quit"?

24

Saya memiliki aplikasi yang tidak akan mati: itu hilang dari dermaga, tetapi jendelanya tetap ada (dengan bola pantai, jika saya arahkan mouse ke atasnya). Tidak menggunakan CPU, tapi saya ingin itu pergi.

Apakah ada sesuatu yang lebih kuat dari "Force Quit", untuk benar- benar mematikan aplikasi?

Ken
sumber
Saya tidak yakin apakah itu lebih kuat, tetapi cobalah Aplikasi> Utilitas> Monitor Aktivitas. Temukan prosesnya, dan Force Quit. Jika itu tidak berhasil, catat nomor proses, pergi ke Terminal dan ketik "kill #" di mana # adalah nomor proses. HTH
David DelMonte
6
tombol daya?
Daniel
1
@DanielLawson Sayangnya, situasi ini biasanya menghasilkan itu.
CajunLuke
1
David: Saya berasumsi bahwa apa yang disebut Apple "Force Quit" adalah sama tidak peduli bagaimana Anda mendapatkannya, tetapi saya mencobanya juga, tanpa efek.
Ken

Jawaban:

14

Jika Anda tahu nama aplikasi, Anda dapat memeriksa di Activity Monitor untuk melihat apakah itu masih berjalan di sana dan mencoba Force Quit-nya. Jika itu tidak berhasil, perhatikan ID proses aplikasi (pid). Buka Terminal dan ketik kill [pid], ganti "[pid]" dengan nomor yang Anda catat sebelumnya. Jika itu tidak berhasil, coba kill -3 [pid]dan jika itu tidak berhasil kill -9 [pid]. Jika proses ini dimiliki oleh user yang berbeda (ini tidak mungkin), Anda mungkin perlu mengganti killdengan sudo killdan ketik password bila diminta.

Jika aplikasi tidak muncul di Activity Monitor atau Anda tidak bisa killmelakukannya, jendela itu mungkin macet di tempat lain dan aplikasi itu tidak berjalan lagi. Dalam hal ini, kadang-kadang (tidak selalu) dapat bekerja ke killall SystemUIServeratau killall Dock.

Jika tidak ada yang berhasil, Anda harus keluar dan kembali atau reboot. Beberapa kali saya sampai pada titik ini, aplikasi ini sangat macet sehingga tidak bisa keluar atau dimatikan, jadi saya harus mem-boot ulang harddisk.

CajunLuke
sumber
Saya mencoba semua ini (termasuk sudo, meskipun prosesnya adalah milik saya), tanpa perubahan. Apakah akan killall SystemUIServermemengaruhi salah satu aplikasi terbuka saya yang lain, seperti lupa posisi jendela?
Ken
2
gentmatt: Menurut kill -l, -3 adalah SIGQUIT, dan -9 adalah SIGKILL ("non-catchable, non-ignorable kill").
Ken
1
@gentmatt 3 adalah sinyal QUIT yang memberikan proses kemampuan untuk mencegat sinyal dan melakukan pembersihan. 9 is KILL adalah "tidak dapat ditangkap dan tidak dapat diabaikan". Ada tumpukan sinyal lain yang dapat Anda kirim; jalankan man kill(yang ada di 10 besar perintah UNIX terbaik yang pernah ada) untuk melihat semuanya.
CajunLuke
1
Saya biasanya hanya membunuh -9. -3 tidak lebih kuat dari "Force Quit"
segfault
3
@BoTian Benar; Saya langsung lompat ke -9. Terkadang saya sama sekali tidak peduli dengan Force Quit. Tetapi bagi pengguna yang tidak tahu apa yang mereka lakukan, itu bisa bekerja dan kecil kemungkinannya berbahaya. Ini juga tidak butuh waktu lama, jadi waktu yang dihabiskan untuk rasio hasil yang diharapkan tidak terlalu buruk.
CajunLuke
7

Jendela paksa berhenti killall,, dan killsemua proses pengiriman sinyal TERM secara default. Anda dapat menggunakan killall -killjika itu tidak berhasil.

Utilitas killall membunuh proses yang dipilih oleh nama, yang bertentangan dengan seleksi oleh pid seperti yang dilakukan oleh kill (1). Secara default, itu akan mengirim sinyal TERM ke semua proses dengan UID nyata yang identik dengan penelepon killall yang cocok dengan nama nama panggilan. Pengguna super diizinkan untuk mematikan proses apa pun.

Jika Anda menjalankan sudo dtrace -n 'proc:::signal-send /pid/ { printf("%s -%d %d",execname,args[2],args[1]->pr_pid); }'dan keluar beberapa aplikasi dari jendela paksa keluar, sinyal biasanya ditampilkan sebagai -15 (TERM). Tetapi ketika Anda keluar dari proses latar belakang (atau aplikasi yang tidak ditampilkan di Dock) dari Activity Monitor, sinyal biasanya ditampilkan sebagai -9 (KILL).

SIGTERM adalah sinyal default yang dikirim ke suatu proses dengan perintah kill atau killall. Itu menyebabkan penghentian suatu proses, tetapi tidak seperti sinyal SIGKILL, itu dapat ditangkap dan ditafsirkan (atau diabaikan) oleh proses. Oleh karena itu, SIGTERM mirip dengan meminta proses untuk mengakhiri dengan baik, memungkinkan pembersihan dan penutupan file. Untuk alasan ini, pada banyak sistem Unix selama shutdown, init mengeluarkan SIGTERM untuk semua proses yang tidak penting untuk mematikan, menunggu beberapa detik, dan kemudian mengeluarkan SIGKILL untuk secara paksa menghentikan segala proses yang tersisa.

Lri
sumber
Beberapa info bagus di sini, tetapi tidak satu pun dari varian ini yang membunuh prosesnya tampaknya memiliki efek sama sekali terhadapnya.
Ken
Jika tidak SIGKILLberfungsi, aplikasinya mungkin dalam kondisi tidur tanpa gangguan , dan benar-benar tidak ada yang dapat Anda lakukan (sebelum mem-boot ulang).
Blacklight Shining
Hanya ingin tahu juga, apakah ini adalah aplikasi pengguna, seperti mail.app atau pages.app atau apakah ini entah bagaimana, suatu proses sistem, seperti Spotlight, atau proses latar belakang aplikasi, seperti Plex (yang saya kesulitan hapus).
David DelMonte
6

Saya pernah mengalami situasi di mana Force Quit, Monitor Aktivitas kill, dan metode lain tidak berfungsi, dan Mac saya tidak bisa dimatikan karena itu.

Dalam hal ini, sudo shutdown -r nowbekerja ketika tidak ada yang lain, dan mungkin lebih baik daripada melakukan shutdown keras melalui tombol power.

Bocah Karate
sumber
1

Seperti dalam jawaban di atas, cara terkuat untuk menghentikan proses apa pun adalah SIGKILL, mis kill -9 process_id.

Namun, ada proses yang tidak mungkin Force Quitatau tidak mungkin dilakukan kill. Mereka disebut sebagai zombieproses.

Berikut ini skrip pendek yang akan membuat zombieproses selama dua menit:

perl -e 'if($p=fork) {print "unkillable pid:$p\n" ;system("ps -l"); sleep(120)}'

Jalankan skrip di atas di Terminal dan Anda akan mendapatkan output, seperti selanjutnya:

     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

Jika Anda memeriksa kolom status untuk proses yang tidak dapat diselesaikan (dalam kasus ini: 50571) Anda melihat Zbenderanya, apa artinya zombie.

Anda dapat mencoba mengirim killsinyal apa pun (mis. kill -9 50571) Dan prosesnya akan tetap ada. Bagaimanapun, itu tidak terlalu menyakitkan sistem Anda, karena sebenarnya tidak ada - hanya menempati tabel proses.

Dalam contoh di atas, dalam 120 detik akan dihapus.

jm666
sumber
0

Inilah yang harus Anda lakukan:

  1. Di Activity Monitor, Klik dua kali proses ATAU Klik ikon Info untuk membuka jendela proses.
  2. Anda akan melihat proses # di baris Process Group sebagai processName (####) di mana "####" adalah nomor proses Anda.
  3. Buka terminal dan ketik "sudo kill ####" tanpa tanda kutip dan tekan enter
  4. Masukkan kata sandi Anda, terminal tidak akan menampilkan input Anda di sini
  5. Proses terbunuh.

Proses seperti ini sebaiknya dihapus dalam safe mode jika Anda akan mencoba mencopot pemasangan.

Ceria, Bryan

Brock Vond
sumber