Làm cách nào để hủy một tiến trình trong MacOS?


77

Tôi đã cố gắng kill -9 698nhưng quá trình này không chết.

$ ps -ef | grep chromium
  502   698   811   0   0:01.24 ??         0:07.28 /Users/lucius/chromium/src/xcodebuild/Debug/Chromium.app/Contents/MacOS/Chromium
  502   854   732   0   0:00.00 ttys001    0:00.00 grep chromium
$ kill -9 698


$ ps -ef | grep chromium
  502   698   811   0   0:01.24 ??         0:07.28 /Users/lucius/chromium/src/xcodebuild/Debug/Chromium.app/Contents/MacOS/Chromium
  502   854   732   0   0:00.00 ttys001    0:00.00 grep chromium

1
Không phải là một thực hành tốt để thực hiện đầu tiên kill -15 ...và nếu điều đó không hoạt động sau đó kill -1 ...và nếu điều đó không hoạt động sau đó kill -9 ...?
waxwing

Câu trả lời:


130

Nếu bạn đang cố gắng giết -9 nó, bạn có PID chính xác và không có gì xảy ra, thì bạn không có quyền để giết quá trình.

Giải pháp:

$ sudo kill -9 PID

Được rồi, chắc chắn Mac OS / X đưa ra thông báo lỗi cho trường hợp này:

$ kill -9 196
-bash: kill: (196) - Operation not permitted

Vì vậy, nếu bạn không nhận được thông báo lỗi, bằng cách nào đó, bạn không nhận được đúng PID.


Có thể đúng nhưng tôi nhớ lại kill đưa ra thông báo lỗi nếu quá trình không thuộc sở hữu của kẻ giết người.
paxdiablo

Chúa ơi, đó là một trong những hành vi khác với UNIX đến UNIX. Chúng tôi mong muốn không có lỗi đó, bởi vì đó là một kênh bí mật; mặt khác, đó là một thông báo lỗi hữu ích.
Charlie Martin

UNIX nào không có lỗi ở đây? Tôi đã kiểm tra BSD, Linux và Solaris và tất cả đều đưa ra một số dạng lỗi ở trên (EPERM).
Rob Napier

Tôi không biết, mặc dù nếu phải đoán, tôi sẽ đoán Solaris với các tiện ích mở rộng đáng tin cậy (vấn đề kênh bí mật.) Ngoài ra, hãy lưu ý rằng có một vài dòng trống sau khi giết. Tôi tự hỏi tại sao?
Charlie Martin

15

Một số trường hợp bạn có thể muốn hủy tất cả quá trình đang chạy trong một cổng cụ thể. Ví dụ: nếu tôi đang chạy một ứng dụng nút trên cổng 3000 và tôi muốn loại bỏ ứng dụng đó và bắt đầu một ứng dụng mới; thì tôi thấy lệnh này hữu ích.

Tìm các ID tiến trình đang chạy trên cổng TCP 3000 và loại bỏ nó

kill -9 `lsof -i TCP:3000 | awk '/LISTEN/{print $2}'`

chính xác những gì cần thiết
Humoyun Ahmad

6

Nếu bạn biết tên quy trình, bạn có thể sử dụng:

killall Dock

Nếu không, bạn có thể mở Activity Monitor và tìm nó.


Tôi nghĩ rằng nó có thể là một ý tưởng tồi nếu thực sự chạy lệnh đó. Tôi cho rằng bạn có thể khá dễ dàng chỉ cần khởi động lại dock, nhưng tôi không biết liệu có bất kỳ sự cố nào với cách tiếp cận đó hay không.
Chris Lutz

Đó chỉ là một ví dụ của một quá trình, tôi không muốn anh ta giết chết bến đỗ của mình. Tôi giả sử killallcó một chuỗi khác so với giết.
Garrett

3

Đưa ra đường dẫn đến chương trình của bạn, tôi cho rằng bạn hiện đang chạy nó dưới Xcode và có thể đang ở điểm ngắt gỡ lỗi. Các quy trình không thể bị hủy ở trạng thái này vì việc triển khai cơ bản của các điểm ngắt.

Bước đầu tiên sẽ là chuyển đến quy trình Xcode của bạn và ngừng gỡ lỗi. Nếu vì một lý do kỳ lạ nào đó mà bạn mất quyền truy cập vào Xcode (có lẽ Xcode đã mất quyền truy cập vào quy trình con gdb của nó), thì giải pháp là giết tiến trình gdb. Nói chung, giải pháp ở đây là giết tiến trình mẹ. Trong trường hợp của bạn, đây là PID 811 (cột thứ ba).

Không cần sử dụng -9 trong trường hợp này.


3

Tôi vừa mới tìm kiếm điều này vì tôi đang ở trong tình huống tương tự, và thay vì kill -9 698tôi đã thử sudo kill 428xem 428 là pid của quá trình tôi đang cố gắng giết chết. Nó hoạt động rõ ràng đối với tôi, khi không có ký tự gạch nối '-'. Tôi hy vọng nó sẽ giúp!


Có thử sudo kill -9 PID - điều này làm việc cho tôi (idk lý do tại sao chúng ta không thể giết nó từ người sử dụng và yêu cầu cao)
Rob

2

Nếu kill -9không hiệu quả, thì cũng không killall(hoặc thậm chí killall -9sẽ "dữ dội" hơn). Rõ ràng là quá trình chromium bị mắc kẹt trong một lệnh gọi hệ thống không gián đoạn (tức là trong hạt nhân, không phải trong vùng người dùng) - không nghĩ rằng MacOSX còn lại bất kỳ điều gì trong số đó, nhưng tôi đoán luôn có một lệnh gọi nữa :-(. Nếu điều đó quy trình có một thiết bị đầu cuối điều khiển, bạn có thể có thể chạy nền và giết nó khi chạy ở chế độ nền; nếu không (hoặc nếu quá trình giết chết dữ dội không hoạt động ngay cả khi quy trình được bakcground) tôi không có ý tưởng và tôi nghĩ bạn có thể phải khởi động lại :-(.


2

Tôi đã trải nghiệm rằng nếu kill -9 PIDkhông hiệu quả và bạn sở hữu quy trình, bạn có thể sử dụng kill -s kill PIDđiều này thật đáng ngạc nhiên như trang người đàn ông nói rằng bạn có thể kill -signal_number PID.


kill -s kill 9đã giúp tôi
boraas

0

Gần đây tôi đã phải đối mặt với vấn đề tương tự trong đó trình chỉnh sửa nguyên tử sẽ không đóng. Cả hai đều không phản hồi. Kill / kill -9 / buộc thoát khỏi Activity Monitor - không hoạt động. Cuối cùng phải khởi động lại máy mac của tôi để đóng ứng dụng.


0

trong tiêu điểm, tìm kiếm Activity Monitor. Bạn có thể buộc xóa hoàn toàn bất kỳ ứng dụng nào khỏi đây.

nhập mô tả hình ảnh ở đây

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.