Tìm ID của một quá trình và giết nó


16

Khi nào tôi cần phải giết một quá trình nền ps -e | grep <process_name>

Mà in cái gì đó như thế này 1766 ? 00:00:13 conky, thì tôi sử dụng ID tiến trình để killnó như vậy kill 1766.

Có cách nào tôi có thể đơn giản hóa điều này? Làm cho nó nhanh hơn? Giảm số lượng gõ?


1
Tôi đã nhận được câu trả lời mình muốn, nhưng tôi sẽ đợi một lúc trước khi chấp nhận để cộng đồng có thể hưởng lợi từ các tùy chọn khác nhau có sẵn.
Gautam

Xin vui lòng làm cho câu hỏi này chung chung hơn nếu có thể để nhiều người có thể hưởng lợi từ các câu trả lời
Gautam

Câu trả lời:


18

(TL, DR : pgrep, pkill)

Nhiều biến thể unix đi kèm với pgrepvà đồng hành của nó pkill: Solaris , Linux (một phần của các tiện ích quy trình tiêu chuẩn , có thể vắng mặt trong các hệ thống nhúng Linux), FreeBSD , OpenBSD , NetBSD , đấmchỉ từ MacPorts trên OS X , không phải AIXchỉ gần đây trong HP-UX . Các pgreptiện ích cho thấy quá trình ID của quá trình kết hợp bởi tên, sử dụng và một vài tiêu chí khác. Đối số pgrepđược hiểu là một biểu thức chính quy phải khớp với một phần tên thực thi của quy trình (trừ khi bạn vượt qua một tùy chọn để thay đổi điều này). Nếu bạn gọi pkillthay vìpgrep, tiện ích gửi tín hiệu thay vì hiển thị ID tiến trình.

Một tiện ích tương tự khác là pidof . Trên Linux , nó được cung cấp bởi SysVinit hoặc BusyBox (vì vậy bạn sẽ thường tìm thấy nó trên một hệ thống nhúng Linux không có pgrep); Ngoài ra còn có cổng trên các biến thể unix khác. Các pidoftiện ích có các tùy chọn ít hơn, nó chủ yếu chỉ phù hợp với toàn bộ tên tập tin thực thi. Tiện ích đồng hành của nó killallsẽ gửi tín hiệu đến các chương trình phù hợp¹.

¹ Ghi chú rằng killallcó một ý nghĩa khác nhau trên Solaris và unix có thể khác biến thể; không gõ killallnhư root trên Solaris.


Wow câu trả lời của bạn rất chi tiết, sâu hơn nhiều, Cảm ơn. Vui lòng chỉnh sửa câu hỏi để phù hợp với câu trả lời nếu có thể.
Gautam

@GautamK Tôi không nghĩ câu hỏi cần mở rộng. Nếu bạn làm như vậy, hãy tự chỉnh sửa nó.
Gilles 'SO- ngừng trở nên xấu xa'

Trong số các câu trả lời có số phiếu bầu nhiều nhất Câu trả lời của bạn cung cấp thêm chi tiết, vì vậy tôi chấp nhận nó
Gautam

8
  • killall ProcessName (có một bất lợi với lệnh này là bạn không luôn biết tên quy trình của chương trình).
  • pidof ProccessNamekill the result form pidof
  • ps xu | grep <process name> | grep -v grep | awk '{ print $2 }' | xargs kill -9 Hãy thử một dòng này và sử dụng lại nó tạo thành lịch sử của bash của bạn, hoặc tốt hơn là tạo một bí danh cho nó.

Thứ hai pidofcó vẻ dễ dàng hơn một chút, nhưng vẫn phải mất 2 bước
Gautam

Tôi có thể tìm kiếm / tạo lệnh một dòng thực hiện điều đó trong một bước (với tên quy trình thô) nhưng điều đó sẽ yêu cầu bạn nhập một dòng dài (khó hơn hai bước ở trên) hoặc bạn có thể nhập một lần và tái sử dụng nó tạo thành lịch sử.
Hanan N.

@GautamK tôi đã cập nhật câu trả lời với tùy chọn lệnh đơn.
Hanan N.

6

Trong khi Hanan có một số gợi ý tốt, tôi sẽ thêm pgrep/ pkill. Chúng cho phép kiểm soát tốt hơn nhiều quá trình bạn tìm thấy và các biểu thức chính quy nếu bạn không biết quy trình chính xác bạn sẽ cần phải giết.

PS Hanan pidofcó thể được cung cấp killtrực tiếp với backticks:

kill `pidof processname`

pkilllà chính xác những gì tôi đang tìm kiếm, tôi hầu hết thời gian biết tên quá trình, Chủ yếu là nó conkyhay firefoxhay chromehoặc một cái gì đó như thế. Cảm ơn
Gautam

1

Còn cái này thì sao -

ps -e | awk '$4~/<process name>/{print $1}' | xargs kill

Thí dụ:

[jaypal:~/Temp] sleep 100&
[1] 74863
[jaypal:~/Temp] ps -e | awk '$4~/sleep/{print $1}' | xargs kill
[1]+  Terminated: 15          sleep 100

Cập nhật:

Xin lỗi, đây rõ ràng là không đáp ứng được yêu cầu của ít gõ do đó, một cách tốt để làm việc đó sẽ có thêm một functionđến của bạn .bashrc, .profilehoặc bất cứ kịch bản khởi động. Các chức năng có thể là một cái gì đó như thế này -

killp() {
awk -v pname="$1" '($4==pname){print $1}' <(ps -e) | xargs kill
}

Sau khi thêm, bạn có thể chỉ cần chuyển tên của quy trình của bạn:

[jaypal:~] sleep 100&
[1] 77212
[jaypal:~] killp sleep
[1]+  Terminated: 15          sleep 100
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.