Shell script thành -9 kill dựa trên tên


28

Có cách nào (có lẽ là một tập lệnh) làm thế nào để tự động hóa quá trình này:

petr@sova:~$ ps -ef | grep middleman
petr     18445  2312  1 12:06 pts/2    00:00:01 /home/petr/.rvm/gems/ruby-1.9.3-p362/bin/middleman                                                                  
petr     18581 13621  0 12:08 pts/0    00:00:00 grep --color=auto middleman
petr@sova:~$ kill -9 18445

Thật không may, pkillquá yếu vì tôi phải đi với -9tùy chọn trên kill.


2
Bạn cũng có thể sử dụng -9với pkill...
Ngừng làm hại Monica

6
Theo tôi, nó thanh lịch và phù hợp hơn để sử dụng -KILLhơn -9. Số nào tương ứng với tín hiệu nào phụ thuộc vào việc thực hiện. SIGKILLtình cờ có 9trên Linux i386 và Linux amd64, nhưng không nhất thiết phải ở mọi nơi. ( Thêm thông tin ở đây. )
Eliah Kagan

5
@EliahKagan: mặc dù tôi cũng thích sử dụng -KILL(vì nó làm cho mã dễ đọc hơn), nên lưu ý rằng SIGKILL = 9được chỉ định bởi POSIX , vì vậy -9ngày nay khá dễ mang theo (và không phụ thuộc vào nhân hoặc kiến ​​trúc).
Andrea Corbellini

Câu trả lời:


36

Bạn có thể sử dụng shell của mình để thực hiện nhiệm vụ này cho bạn:

kill -9 $(pidof middleman)

Shell thực thi lệnh pidof middlemanđầu tiên. Đầu ra của pidof (8) là id quá trình. Vì vậy, shell thay thế pidof-command với id quy trình và thực thi kill -9 18845(hoặc bất cứ id quy trình chính xác nào).


Sự khác biệt giữa cái này và kill -9 $(pgrep middleman)cái gì?
Aaron Franke

54

Có một giải pháp thậm chí còn đơn giản hơn một trong qbi: killallhãy để bạn giết các tiến trình theo tên và bạn có thể chỉ định các tín hiệu.

killall -9 middleman

Xem man killallđể biết thêm thông tin và các tùy chọn bổ sung (có khá nhiều).

Như tên cho thấy, điều này không gửi tín hiệu cho tất cả các quá trình được đặt tên middleman. Nhưng điều đó không khác với những cách khác (như pkill). Hơn nữa, pkill -9 middlemansẽ nhắm mục tiêu các quá trình có tên phù hợp nhưng không bằng nhau middleman, chẳng hạn như middleman2, là tốt.


2
killallđể giành chiến thắng!
Andrea Corbellini

4
giết tất cả người trung gian? trời ơi ...
Tobias Kienzler

16

Các câu trả lời khác là hoàn toàn chính xác, nhưng tôi cũng có thể thêm một tùy chọn thứ ba để tất cả được ghi lại ở đây. Bạn cũng có thể dùng:

pkill -9 middleman

Xem man pkillđể biết thêm thông tin và các tùy chọn bổ sung.

Nó không thực sự quan trọng mà bạn sử dụng phương pháp nào. Tất cả họ sẽ làm việc. Nhưng biết các tùy chọn nếu hữu ích nếu bạn muốn sửa đổi hành vi theo một cách nào đó, vì các trang man tương ứng hiển thị những tùy chọn phù hợp khác có sẵn.


Lạ thật, không làm việc ở đây. Cũng khôngmiddleman*
mreq

1
À. Nhìn kỹ hơn, có vẻ như bạn muốn giết một thông dịch viên ruby, hơn là một quá trình thực sự được gọi middleman. Đây là nơi mà sự khác biệt trong cách chính xác pkill, killall, pidofgrepquá trình trận đấu thực sự bắt đầu có vấn đề!
Robie Basak

12
pkill -9 -f middleman

Các -ftùy chọn làm cho nó phù hợp với dòng lệnh đầy đủ, chứ không phải chỉ có tên quá trình.

Lưu ý rằng đó -9phải là tín hiệu cuối cùng, không phải là thứ cần sử dụng thường xuyên.


1
cảm ơn! Tôi thực sự thích khả năng phù hợp vớicomplete command line
cwd

dòng lệnh hoàn thành là thực sự mát mẻ!
okwap

10

Để cho vui, tôi muốn thêm một cách học cũ, thủ công hơn

kill -9 `ps aux | grep middleman | awk '{print $2}'`

1
Tôi đã làm điều đó tại nơi làm việc một vài năm trước và quản trị viên đã cho tôi một cái nhìn nói rằng "được thôi, ông ạ". Cũng có thể thêm grep -v grep trước awk để đảm bảo rằng nó cũng không giết lệnh grep.
Người giữ Iain

@gerhard, cảm ơn bạn đã chỉnh sửa, không thể tìm thấy dấu tích trở lại trên iPad của tôi. grep -v là một ý tưởng hay ...
slipset

Cách học cũ thực sự sẽ là viết ... grep [m]iddleman ...để tránh làm grephỏng quá trình một cách tình cờ. Bằng cách đó, grep không thể phù hợp với chính nó vì trích dẫn hài hước.
Mikko Rantalainen

1
killall -9 -ir regex_pattern

tương tác (an toàn) và khớp với tên lệnh một phần.

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.