Cách nhận pgrep để hiển thị thông tin quy trình đầy đủ


26

Có cách nào để pgrepcung cấp cho tôi tất cả thông tin về từng quy trình pskhông? Tôi biết tôi có thể pslướt qua grepnhưng đó là rất nhiều cách gõ và nó cũng mang lại cho tôi grepquá trình mà tôi không muốn.

Câu trả lời:


22

pgrepTùy chọn đầu ra khá hạn chế. Bạn gần như chắc chắn sẽ cần gửi lại thông qua psđể có được thông tin quan trọng. Bạn có thể tự động hóa điều này bằng cách sử dụng chức năng bash trong ~/.bashrc.

function ppgrep() { pgrep "$@" | xargs --no-run-if-empty ps fp; }

Sau đó gọi lệnh với.

ppgrep <pattern>

2
Cảm ơn! Tôi đã sửa đổi nó thành: Mặt function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; } khác, nếu không có quy trình nào khớp với tìm kiếm của bạn, nó sẽ bỏ toàn bộ psmegilla sử dụng.
JoelFan

Trên OS X, pscần một dấu gạch nối cho các cờ:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
Erik Nomitch

1
Nếu bạn muốn tránh trang sử dụng ps, GNU xargs có một tùy chọn, -rnó sẽ chỉ thực thi lệnh nếu nó đã nhận được một danh sách.
Doug

1
Cách ngắn gọn hơn làps fp $(pgrep -d, "$@")
Igor Mikushkin

14

Kết hợp pgrepvới psviệc sử dụng xargs!

pgrep <your pgrep-criteria> | xargs ps <your ps options> -p

Ví dụ thử

pgrep -u user | xargs ps -f -p

để có được một danh sách quá trình đầy đủ user.

Thật tuyệt khi bạn giữ dòng đầu tiên với tên cột. grepluôn luôn giảm tên cột.


Xuất sắc! điều này giải quyết một vấn đề kỳ lạ với kịch bản khởi động máy chủ arcgis cho xfvb
prusswan 17/07/14

Đây phải là câu trả lời được chấp nhận, bởi vì nó sử dụng các ống unix theo cách thích hợp, lấy danh sách các PID từ một công cụ này và đưa trở lại vào một công cụ khác (nếu nó giống như tin tặc, thì không - kỹ thuật này có thể được sử dụng trong rất nhiều công cụ UNIX , giống như các công cụ grep email. Hàm Bash ppgrep () là một sự phụ thuộc không cần thiết và tránh đối mặt với cơ hội học tập được trình bày ở đây.)
Scott Prive

10

Những điều sau đây chỉ cung cấp cho bạn dòng lệnh + lệnh đầy đủ. Đối với "tất cả các thông tin ps", xem câu trả lời khác ...

Hầu hết các linux sử dụng Procps-ng . Kể từ 3.3.4 (phát hành năm 2012), pgrep -a( --list-full) hiển thị dòng lệnh đầy đủ.
Lưu ý: Theo mặc định pgrep chỉ khớp với mẫu bạn đưa ra so với tên thực thi. Nếu bạn muốn khớp với dòng lệnh đầy đủ (như grepping ps hiện), hãy thêm tùy chọn -f( --full).

Trong các phiên bản cũ hơn (bao gồm dự án Procps gốc ), -ltùy chọn hiển thị thông tin nhưng hành vi của nó rất đa dạng:

  • pgrep -fl khớp mẫu với dòng lệnh đầy đủ và hiển thị dòng lệnh đầy đủ.
  • pgrep -lmột mình chỉ khớp với tên thực thi và chỉ hiển thị tên thực thi.
    Nếu bạn không muốn kết hợp hoàn chỉnh, bạn không thể xem dòng lệnh đầy đủ :-( [ https://bugs.debian.org/cgi-bin/ormsreport.cgi?orms=526355#15 ]

Không chắc chắn mã * BSD sử dụng nhưng trang người đàn ông của họ ghi lại -flhành vi cũ .

Thật không may, bạn thậm chí không thể sử dụng một cách hợp lý -fl- trong các Procps-ng gần đây, -f( --list-name) luôn chỉ in tên thực thi.


4

Linux

Đối với phiên bản GNU của pgrepcác -i(trường hợp vô cảm) không được hỗ trợ, và dài + đầu ra mờ được thực hiện với -af.

$ pgrep -af apache

OUTPUT:
    1748 /usr/sbin/apache2 -k start

Trang nam :

   -a, --list-full
       List  the  full  command line as well as the process ID.  (pgrep only.)

   -f, --full
       The pattern is normally only matched against the process name.  
       When -f is set, the full command  line is used.

Hệ điều hành Mac

Trên OSX (và bằng suy luận, trên BSD) -l( đầu ra dài ) kết hợp với -f( khớp với danh sách đối số đầy đủ ) sẽ hiển thị lệnh hoàn chỉnh ( -ithêm phân biệt chữ hoa chữ thường):

$ pgrep -fil ssh

OUTPUT:
    33770 ssh: abc@192.168.0.123-22 [mux] t

Các trang người đàn ông :

 -l          Long output.  For pgrep, print the
             process name in addition to the
             process ID for each matching
             process.  If used in conjunction
             with -f, print the process ID and
             the full argument list for each
             matching process.  For pkill, dis-
             play the kill command used for
             each process killed.

1

Sử dụng tùy chọn -v để grep - nó trả về mọi thứ NHƯNG mẫu được yêu cầu.

ps -ef | grep <process> | grep -v grep

Đây là câu trả lời tốt nhất cho tôi. Nó cho bạn thấy toàn bộ lệnh mà không bị cắt ngắn như nó xảy ra vớipgrep -u user | xargs ps -f -p
BringBackCoosore64

0

Tôi không nghĩ là có, thông tin nhiều nhất bạn có thể nhận được là tên và quy trình id bằng cách sử dụng tùy chọn -l để pgrep.

ps hỗ trợ tất cả các loại tùy chọn định dạng, vì vậy tôi sẽ chỉ tạo bí danh cho những gì bạn muốn lưu gõ. Một cách đơn giản để loại trừ quy trình grep khỏi đầu ra chúng tôi bao gồm một đường ống bổ sung grep -v grepđể loại trừ bất kỳ quy trình grep nào.



-1

Điều này sẽ giúp bạn tôi đoán:

ps


2
Bạn có thể vui lòng giải thích. Thông tin thêm sẽ cải thiện câu trả lời này
Dave M
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.