Sử dụng pgrep / pidof cho tên quá trình phức tạp?


11

Tôi đang cố gắng sử dụng pidof hoặc pgrep để có thể gửi HUP tới một quy trình trong hệ thống của mình. Vấn đề là tôi chỉ muốn giết quá trình với một tham số chính xác.

Đây là đầu ra của 'ps awx'

  657 ?        S      0:00 processname software
  658 ?        S      0:00 processname demo
  659 ?        S      0:00 processname test

Bằng cách thực hiện một trong những điều sau:

pidof processname 
pgrep processname

Bạn nhận được danh sách tất cả các quy trình bắt đầu bằng tên quy trình, nhưng tôi muốn làm một cái gì đó như:

pidof processname test
pgrep processname test

Để chỉ truy xuất PID tôi cần (trong ví dụ này sẽ là 659)

CẬP NHẬT

Bằng cách sử dụng cờ -f trên pgrep, chỉ cần thực hiện những gì tôi muốn, bằng cách thực hiện:

pgrep -f "processname test"

Bạn sẽ có câu trả lời đúng.


Đúng, bạn thường cần -fbởi vì bạn muốn khớp trên dòng lệnh đầy đủ. Lưu ý rằng pgrep hoạt động trên các biểu thức thông thường, do đó bạn cũng có thể thực hiện khớp tương đối phức tạp.
cjc

Câu trả lời:


10
$ ps aux |grep [d]evio
user01   10220  0.0  0.1   5376  2424 pts/5    S+   11:41   0:00 ssh devio
$ pgrep -f "ssh devio"
10220
$ pkill -0 -f "ssh devio" ; echo $?
0
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.