Làm thế nào tôi có thể giết một quá trình bằng tên của nó?


44

Đôi khi tôi nhận thấy rằng quá trình Pythontreo lên. Sau đó, tôi sẽ giết nó thông qua Trình giám sát hoạt động và mọi thứ đều ổn.

Thay vào đó, tôi muốn giết quá trình đó trong Terminal. Tuy nhiên, việc tìm kiếm PIDcó vẻ không cần thiết vì chỉ có một quy trình theo tên Python.

Có thể giết một quá trình bằng tên duy nhất của nó?

Câu trả lời:


52

Bạn sẽ có thể chạy lệnh sudo killall Python.

Bạn cần chạy bằng root vì Python thuộc về root chứ không phải người dùng.


Tôi đã làm điều đó:No matching processes belonging to you were found
gentmatt

1
Quá trình Python không thuộc về người dùng của bạn. Hãy thử nó như root thay thế : sudo killall Python.
HenningJ

1
@HenningJ Sudo làm việc vì một số lý do. Tôi chỉ thấy rằng quá trình không thuộc về tôi. Tôi có thể giết quá trình mà không cần sudogiết khi sử dụng PID. Tại sao?
gentmatt

1
Tôi nghĩ rằng bởi vì sử dụng một PID không phải là người dùng / root cụ thể, trong khi đó là một tên quy trình. Tôi sẽ chỉnh sửa câu trả lời này để phản ánh sudo.
Matt yêu

Điều này cũng hoạt động cho nhiều quy trình được đặt tên giống hệt nhau, tốt đẹp
chrismarx

21
sudo killall -s SIGINT "process name"

Nếu bạn không thể là một sudo vì nó sẽ hỏi mật khẩu và tôi cảm thấy bạn không muốn điều đó trong một kịch bản. pkill đến để giải cứu :)

pkill -9 "process name"

5

Bạn có thể tắt Ứng dụng bằng cách sử dụng Activity Monitor.app, là giải pháp GUI. Đó sẽ là một "lực lượng bỏ" đơn giản. Tuy nhiên, điều đó không phải lúc nào cũng diễn ra vì những lý do khác nhau trong một số tình huống!

Giải pháp dòng lệnh như đã đề cập trong phần bình luận ở trên chứa nhiều tùy chọn hơn cho người dùng. sudo killall Pythonhoặc nếu nó là một chương trình đang chạy - quy trình cũng sudo killall /Applications/Whatever.appbuộc quá trình phải thoát ra.

Bạn cũng có thể buộc một quá trình thoát ra, sử dụng PID được chỉ định . Trong trường hợp Activity Monitor.app, nó sẽ là kill 25794hoặckill -9 25794

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

Một số chi tiết:

Chương trình kill trong Terminal chỉ đơn giản là buộc thoát khỏi một chương trình, như thể bằng điều khiển từ xa. (Nó thậm chí hoạt động khi bạn SSH vào máy Mac của mình từ một địa điểm từ xa. Thực hiện theo lệnh kill với số ID tiến trình (PID ngắn) của chương trình bạn muốn chấm dứt.

Trừ khi bạn cũng sử dụng sudo, bạn chỉ có thể giết các chương trình mà bạn sở hữu. (Bản thân hệ điều hành, bản gốc hệ điều hành luôn luôn chạy các chương trình của riêng mình và về mặt kỹ thuật, những người khác, quay số từ đường, đang chạy các chương trình của chính họ ngay cả khi bạn đang sử dụng máy Mac!)

Các -9lá cờ là một “phi catchable, giết không thể bỏ qua.” Nói cách khác, nó là một sát thủ công nghiệp-sức mạnh chấp nhận không có lời cầu xin cho lòng thương xót từ chương trình bạn đang giết chết.


5

Mặc dù nó không sử dụng PID, tôi tìm ra sau để được khá hiệu quả:

ps aux | grep "String or name of process"

Dòng này trả về một loạt thông tin về quá trình khớp và bạn có thể killhoặc bất cứ điều gì từ đó.


2
pkill -f "process name"

Dựa trên https://stackoverflow.com/a/22334807/1243763


1
Có một pidof trên macOS? Và tại sao không sử dụng pkill mà không có vấn đề của quá trình bổ sung?
nohillside

đồng ý và tôi đã bỏ lỡ điều đó Tôi đã có pidofnhị phân là bí danh không chuẩn của ps -e -o pid,args | grep -E "\b$1\b" | awk "{print \$1}" | tr '\n' ' '. Vì vậy, pkill -fcó ý nghĩa hơn.
Samir
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.