Nhận pids từ từ khóa ps -ef | grep


111

Tôi muốn sử dụng ps -ef | grep "keyword"để xác định pid của một quy trình daemon (có một chuỗi duy nhất trong đầu ra của ps -ef trong đó).

Tôi có thể giết quá trình bằng pkill keywordcó lệnh nào trả về pid thay vì giết nó không? (pidof hoặc pgrep không hoạt động)

Câu trả lời:


231

Bạn có thể sử dụng pgrepmiễn là bạn bao gồm các -ftùy chọn. Điều đó làm cho pgrepcác từ khóa khớp trong toàn bộ lệnh (bao gồm các đối số) thay vì chỉ tên tiến trình.

pgrep -f keyword

Từ trang người đàn ông :

-f       Mẫu thường chỉ được so khớp với tên tiến trình. Khi -fđược thiết lập, dòng lệnh đầy đủ sẽ được sử dụng.


Nếu bạn thực sự muốn tránh pgrep, hãy thử:

ps -ef | awk '/[k]eyword/{print $2}'

Lưu ý []xung quanh chữ cái đầu tiên của từ khóa. Đó là một thủ thuật hữu ích để tránh khớp awklệnh.


3
ps được sử dụng quá mức, và pgrep được sử dụng quá mức. Cảm ơn vì bài đăng.
Felipe Alvarez,

6
Một cách để vượt qua các đầu ra để tiêu diệt là: kill -9 `pgrep -f keyword`
Kris

Câu trả lời này là tốt nhất bao giờ hết. Vì vậy, nhiều lần tôi đã lãng phí vớips aux | grep chrome
Brandon

Đã phải sử dụng [k]thủ thuật trên pgrep -f. Kịch bản của tôi được chạy trong một subshell vì vậy tôi nghĩ rằng nó đã được chọn lên lệnh mẹ của nó (khó có thể biết chắc chắn - những pid nó trở lại đã biến mất khi lệnh đã được thực hiện thực hiện!)
ArtOfWarfare

2
@Kris cho trường hợp sử dụng này sẽ không đơn giản hơn nếu chỉ sử dụng pkill -9 -f keyword?
oidualc

53

Thử

ps -ef | grep "KEYWORD" | awk '{print $2}'

Lệnh đó sẽ cung cấp cho bạn PID của các quá trình có KEYWORD trong đó. Trong trường hợp này, awktrả về những gì trong cột thứ 2 từ đầu ra.


2
Bởi vì điều này có thể trả lại nhiều hơn một pid mà bạn có thể nhận được đầu tiên bằng cách thêm vào | head -1.
Kris

'head -1' sẽ trả về grep PID trong một số linux, Nên là đuôi -1.
Joao Vitorino

22

ps -ef | grep KEYWORD | grep -v grep | awk '{print $2}'


4
Có lẽ là lỗi đánh máy? ps -ef | grep KEYWORD | grep -v grep | awk '{print $ 2}'
rmv

Bạn có biết cách chuyển PID trả về thành "kill -9" không ?!
alybadawy

3
@alybadawy chỉ cần thêm | xargs kill -9vào cuối
patte

8

tôi sử dụng

ps -C "keyword" -o pid=

Lệnh này sẽ cung cấp cho bạn một số PID.



3

Để kết thúc một quy trình bằng một từ khóa cụ thể, bạn có thể tạo một bí danh trong ~/.bashrc(linux) hoặc ~/.bash_profile(mac).

alias killps="kill -9 `ps -ef | grep '[k]eyword' | awk '{print $2}'`"

Hoàn hảo! Thêm một đường ống vào cuối cuốn sách | head -1này sẽ đẹp và gọn gàng.
Russ
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.