Có thứ gì mạnh hơn so với Lực lượng Quit xông?


24

Tôi có một ứng dụng sẽ không chết: nó đã rời khỏi bến tàu, nhưng cửa sổ vẫn còn (với một quả bóng bãi biển, nếu tôi di chuột qua nó). Nó không sử dụng CPU, nhưng tôi muốn nó biến mất.

Có thứ gì mạnh hơn "Force Quit", để thực sự giết một ứng dụng không?


Tôi không chắc liệu nó có mạnh hơn không, nhưng hãy thử Ứng dụng> Tiện ích> Giám sát hoạt động. Tìm quá trình, và Thoát khỏi lực lượng. Nếu điều đó không hiệu quả, hãy lưu ý số quy trình, đi đến Terminal và nhập "kill #" trong đó # là số quy trình. HTH
David DelMonte

6
nút nguồn?
Daniel

1
@DanielLawson Thật không may, những tình huống này thường dẫn đến điều đó.
CajunLuke

1
David: Tôi cho rằng những gì Apple gọi là "Force Quit" là như nhau cho dù bạn có làm thế nào, nhưng tôi cũng đã thử nó, không có hiệu quả.
Ken

Câu trả lời:


14

Nếu bạn biết tên của ứng dụng, bạn có thể kiểm tra Activity Monitor để xem nó có còn chạy ở đó không và thử Force Quit. Nếu điều đó không hiệu quả, hãy lưu ý ID tiến trình của ứng dụng (pid). Chuyển đến Terminal và gõ kill [pid], thay thế "[pid]" bằng số bạn đã lưu ý trước đó. Nếu nó không hoạt động, hãy thử kill -3 [pid]và nếu nó không hoạt động kill -9 [pid]. Nếu quá trình này được sở hữu bởi một người dùng khác nhau (điều này không có khả năng), bạn có thể cần phải thay thế killvới sudo killvà gõ mật khẩu của bạn khi được nhắc.

Nếu ứng dụng không hiển thị trong Trình giám sát hoạt động hoặc bạn không thể kill, thì cửa sổ có thể bị kẹt lại ở một nơi khác và ứng dụng đơn giản là không chạy nữa. Trong trường hợp này, đôi khi (không phải lúc nào) nó có thể hoạt động killall SystemUIServerhoặc killall Dock.

Nếu không có cái nào hoạt động, bạn sẽ phải đăng xuất và đăng nhập lại hoặc khởi động lại. Một vài lần tôi đã đến thời điểm này, ứng dụng đã bị kẹt đến mức không thể đăng xuất hoặc tắt, vì vậy tôi phải khởi động lại khó khăn.


Tôi đã thử tất cả những thứ này (bao gồm sudo, mặc dù quy trình thuộc sở hữu của tôi), không có thay đổi. Sẽ killall SystemUIServerảnh hưởng đến bất kỳ ứng dụng đang mở nào khác của tôi, như quên vị trí cửa sổ?
Ken

2
gentmatt: Theo kill -l, -3 là SIGQUIT và -9 là SIGKILL ("giết không bắt được, không bắt lửa").
Ken

1
@gentmatt 3 là tín hiệu QUIT cung cấp cho quá trình khả năng chặn tín hiệu và thực hiện dọn dẹp. 9 là KILL là "không thể bắt và không bắt lửa". Có một đống tín hiệu khác mà bạn có thể gửi; chạy man kill(nằm trong top 10 lệnh UNIX tốt nhất từng có) để xem tất cả.
CajunLuke

1
Tôi thường chỉ giết -9. -3 không mạnh hơn "Force Quit"
segfault

3
@BoTian Đúng; Tôi bỏ qua thẳng đến -9. Đôi khi tôi không bận tâm đến Force Quit chút nào. Nhưng đối với người dùng không biết họ đang làm gì, nó có thể hoạt động và ít có khả năng gây hại. Nó cũng không mất nhiều thời gian, vì vậy thời gian dành cho tỷ lệ kết quả mong đợi không quá tệ.
CajunLuke

7

Cửa sổ thoát lực lượng killallkilltất cả các quy trình gửi tín hiệu TATE theo mặc định. Bạn có thể sử dụng killall -killnếu điều đó không làm việc.

Tiện ích killall giết chết các tiến trình được chọn theo tên, trái ngược với lựa chọn của pid như được thực hiện bởi kill (1). Theo mặc định, nó sẽ gửi tín hiệu HẠN cho tất cả các quy trình có UID thực giống hệt với người gọi của killall khớp với tên Procname. Siêu người dùng được phép giết bất kỳ quá trình.

Nếu bạn chạy sudo dtrace -n 'proc:::signal-send /pid/ { printf("%s -%d %d",execname,args[2],args[1]->pr_pid); }'và thoát một số ứng dụng từ cửa sổ thoát lực, tín hiệu thường được hiển thị là -15 (HẠN). Nhưng khi bạn thoát khỏi một quá trình nền (hoặc một ứng dụng không được hiển thị trong Dock) từ Activity Monitor, tín hiệu thường được hiển thị là -9 (KILL).

SIGTERM là tín hiệu mặc định được gửi đến một quá trình bằng các lệnh kill hoặc killall. Nó gây ra sự chấm dứt của một quá trình, nhưng không giống như tín hiệu SIGKILL, nó có thể bị bắt và giải thích (hoặc bỏ qua) bởi quá trình. Do đó, SIGTERM giống như yêu cầu một quy trình chấm dứt độc đáo, cho phép dọn dẹp và đóng các tệp. Vì lý do này, trên nhiều hệ thống Unix trong khi tắt máy, init phát hành SIGTERM cho tất cả các quy trình không cần thiết để tắt nguồn, đợi vài giây và sau đó phát hành SIGKILL để chấm dứt bất kỳ quy trình nào còn tồn tại.


Một số thông tin tốt ở đây, nhưng không có biến thể nào trong số các biến thể giết chết quá trình này dường như có bất kỳ ảnh hưởng nào đến nó.
Ken

Nếu thậm chí không SIGKILLhoạt động, ứng dụng có thể đang trong giấc ngủ không bị gián đoạn và thực sự không có gì bạn có thể làm (thiếu khởi động lại).
Blacklight Shining

Cũng tự hỏi, nếu đây là một ứng dụng người dùng, như mail.app hoặc Pages.app hoặc liệu đây có phải là một quy trình hệ thống, như Spotlight hoặc quá trình nền ứng dụng, như Plex (mà tôi gặp sự cố khi xóa).
David DelMonte

6

Tôi đã gặp tình huống Force Quit, Activity Monitor killvà các phương thức khác không hoạt động và máy Mac của tôi không thể tắt được vì nó.

Trong trường hợp này, một sudo shutdown -r nowcông việc khi không có gì khác, và có lẽ tốt hơn là thực hiện tắt máy cứng thông qua nút nguồn.


1

Như trong các câu trả lời ở trên, cách mạnh nhất để chấm dứt bất kỳ quá trình nào SIGKILL, vd kill -9 process_id.

Tuy nhiên, tồn tại quá trình những gì chỉ đơn giản là không thể Force Quitvà cũng không kill. Họ gọi là zombiequá trình.

Đây là một đoạn script ngắn sẽ tạo ra một zombiequy trình trong hai phút:

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

Chạy đoạn script trên trong Terminal và bạn sẽ nhận được đầu ra, như tiếp theo:

     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

Nếu bạn kiểm tra cột trạng thái cho quy trình không thành công (trong trường hợp này: 50571), bạn sẽ thấy Zcờ, có nghĩa là gì zombie.

Bạn có thể thử gửi bất kỳ killtín hiệu nào (ví dụ kill -9 50571) và quá trình vẫn sẽ tồn tại. Dù sao, nó không làm tổn thương nhiều đến hệ thống của bạn, vì thực tế nó không tồn tại - chỉ chiếm bảng quy trình.

Trong ví dụ trên, trong 120 giây, nó sẽ bị xóa.


0

Đây là những gì bạn nên làm:

  1. Trong Trình giám sát hoạt động, Nhấp đúp vào quy trình HOẶC Nhấp vào biểu tượng Thông tin để mở cửa sổ của quy trình.
  2. Bạn sẽ thấy quy trình # trong dòng Nhóm quy trình dưới dạng processName (####) trong đó "####" là số quy trình của bạn.
  3. Mở terminal và gõ "sudo kill ####" mà không có dấu ngoặc kép và nhấn enter
  4. Nhập mật khẩu của bạn, thiết bị đầu cuối sẽ không hiển thị đầu vào của bạn ở đây
  5. Quá trình bị giết.

Một quy trình như thế này được loại bỏ tốt nhất trong chế độ an toàn nếu bạn định thử gỡ cài đặt.

Chúc mừng, Bryan

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.