Câu trả lời:
pgrep
Tù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>
ps
cần một dấu gạch nối cho các cờ:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
-r
nó sẽ chỉ thực thi lệnh nếu nó đã nhận được một danh sách.
ps fp $(pgrep -d, "$@")
Kết hợp pgrep
với ps
việ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. grep
luôn luôn giảm tên cột.
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 ), -l
tù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 -l
một mình chỉ khớp với tên thực thi và chỉ hiển thị tên thực thi. Không chắc chắn mã * BSD sử dụng nhưng trang người đàn ông của họ ghi lại -fl
hà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.
Đối với phiên bản GNU của pgrep
cá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
-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.
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 ( -i
thê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.
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
pgrep -u user | xargs ps -f -p
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.
Để loại bỏ grep
quá trình, bạn có thể sử dụng dấu ngoặc như một phần của mẫu:
ps -ef | grep '[t]ty'
Bạn có thể làm điều này với ps
và pgrep
:
ps -fp $(pgrep -d, tty)
Điều này sẽ giúp bạn tôi đoán:
ps
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ộps
megilla sử dụng.