Làm thế nào để ngăn chặn một loạt các quá trình trên unix nhanh?


8

Làm thế nào để ngăn chặn một loạt các quá trình trên unix nhanh.

Tôi có thể sử dụng ps/ top, kill.

Nếu số lượng tiến trình rất lớn, tôi sử dụng shell script. Có những cách khác, chỉ một hoặc hai lệnh unix có thể làm tốt điều đó?


Bạn có tiền tố tên chung cho các quy trình của bạn?
Hoàng tử John Wesley

1
Điều nguy hiểm ở đây là khi bạn bắt đầu giết quá trình nhanh, bạn có thể giết thứ mà bạn không có ý định giết.
ObscureRobot

telinit 0 hoặc kill -9 1 hoạt động tốt để tiêu diệt TẤT CẢ các quy trình ...
lornix

Câu trả lời:


10

Sự lựa chọn của tôi là pkill/pgrep


Tuyệt quá! Chỉ cần đưa ra một ví dụ: Nếu bạn đang tìm cách tiêu diệt tất cả các quy trình curl, trước tiên hãy chạy pgrep -a curlđể xem tất cả các quy trình sẽ bị giết bởi pkill. Nếu mọi thứ có vẻ tốt, sử dụng pkill curl.
arun

3

Đây là một tập lệnh bash trực tuyến nhỏ mà tôi sử dụng:

ps auxwww | grep -v grep | grep -i $1 | awk '{print $2}' | xargs kill -9

Tôi giết tất cả các quá trình có tên chứa tham số đầu tiên (không phân biệt chữ hoa chữ thường). Bảng phân tích của từng phần là:

  • ps auxwww in tất cả các quy trình với trường "lệnh" rất rộng
  • grep -v grep Có để loại trừ chính nó khỏi vụ giết chóc
  • grep -i $1 phù hợp với tất cả các dòng có chứa tham số đầu tiên
  • awk '{print $2}' lấy tất cả các id quá trình
  • xargs kill -9 giết chết tất cả các quy trình được chọn

+1 Yêu một đường ống tốt, đặc biệt là sử dụng xargs.

tôi thích sử dụng fgrep(không có regex)
Hoàng tử John Wesley

8
Kịch bản này là quá phức tạp so với pkill -9 -f $1. Ngoài ra, không nên sử dụng tín hiệu 9 (KILL). Đó là cách cuối cùng để ngăn chặn một quá trình, không phải là một cách nên được sử dụng thường xuyên.
jlliagre


0

Cách rất nhanh để tiêu diệt nhiều tiến trình (không cần phải viết tập lệnh)

USAGE: ./autokill.kl.sh <proc-name> => This will give you 5 seconds to change your mind and control-C out of the program.

USAGE: ./autokill.kl.sh <proc-name> now => This will immediately kill all processes matching the string/pattern you specified!!!

MODEL: ./autokill.kl.sh httpd

MODEL: ./autokill.kl.sh httpd now

MODEL: ./autokill.kl.sh httpd view => This will only show you the list of processes matching the pattern you specified.

Script có thể được tải trực tiếp tại đây .


0

Tôi thực sự thích sử dụng quảng cáo lệnh pgrep / pkill ở đây là một ví dụ:

[root@testrhel7 ~]# pgrep -l http
2967 httpd
2968 httpd
2969 httpd
2970 httpd
2971 httpd
2972 httpd
[root@testrhel7 ~]#
[root@testrhel7 ~]# pkill -e http
httpd killed (pid 2967)
httpd killed (pid 2968)
httpd killed (pid 2969)
httpd killed (pid 2970)
httpd killed (pid 2971)
httpd killed (pid 2972)
[root@testrhel7 ~]#

Tất nhiên Bạn có thể sử dụng một chu kỳ:

[root@testrhel7 ~]# ps -ef  |grep http| grep -v grep
root       2989      1  0 16:06 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2990   2989  0 16:06 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2991   2989  0 16:06 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2992   2989  0 16:06 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2993   2989  0 16:06 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2994   2989  0 16:06 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
[root@testrhel7 ~]#

[root@testrhel7 ~]# for i in $(ps -ef | awk '/http/ {print $2}'); do kill -9 $i; done 

Tôi hy vọng đó là hữu ích, hạnh phúc giết chết.

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.