Làm cách nào để có được cha mẹ của một quy trình nhất định trong GNU / Linux từ dòng lệnh?


90

Đã giải quyết trước khi hỏi: cat /proc/1111/status | grep PPid


nhanh hơn: grep PPid status |cut -f2như trong time(for((i=0;i<1000;i++));do grep PPid status |cut -f2 >/dev/null;done); tự hỏi nếu có một cái gì đó thậm chí nhanh hơn?
Sức mạnh Bảo Bình

1
@AquariusPower Vì bạn hỏi, fgrep nhanh hơn grep. fgrep PPid status |cut -f2
jbo5112

sed là cách nhanh hơn grep và cắt:sed -rn '/PPid/ s/^.*:\s+// p' < status
Marian

Câu trả lời:


108

Dòng lệnh:

ps -o ppid= -p 1111

Chức năng:

ppid () { ps -p ${1:-$$} -o ppid=; }

Bí danh (một chức năng là thích hợp hơn ):

alias ppid='ps -o ppid= -p'

Kịch bản:

#!/bin/sh
pid=$1
if [ -z $pid ]
then
    read -p "PID: " pid
fi
ps -p ${pid:-$$} -o ppid=

Nếu không có PID nào được cung cấp cho hàm hoặc tập lệnh, chúng sẽ mặc định hiển thị PPID của quy trình hiện tại.

Để sử dụng bí danh, phải cung cấp một bộ lọc.


Các =dấu hiệu là không cần thiết, ít nhất là trên OS X 10.8.2.
jtbandes

5
@jtbandes: Dấu bằng như được sử dụng ở đây ngăn chặn đầu ra của dòng tiêu đề ( LinuxOS X ).
Dennis Williamson

13

Đây là một trong những điều tôi học, quên, học lại, lặp lại. Nhưng nó hữu ích. Cờ của lệnh pstree hiển thị một cây có lá tại N:

pstree -sA $(pgrep badblocks)
systemd---sudo---mkfs.ext4---badblocks

12

Pid cha là PPID biến vỏ, vì vậy

echo $PPID

1
Có, nhưng 1. Tôi muốn cha mẹ của quá trình khác, 2. Tôi muốn có thể đi qua tất cả các tổ tiên để init.
Vi.

1
Mặt khác, việc sử dụng $PPIDchỉ giải quyết vấn đề mà tôi có mà Google đề xuất trang này là câu trả lời.
Paul Whittaker

12

Để in id cha ( PPID) của tất cả các quy trình, sử dụng lệnh này:

ps j

Đối với quy trình đơn, chỉ cần vượt qua PID, như : ps j 1234.

Để chỉ trích xuất giá trị, hãy lọc đầu ra theo awk, như:

ps j | awk 'NR>1 {print $3}' # BSD ps
ps j | awk 'NR>1 {print $1}' # GNU ps

Để liệt kê các PID của tất cả các bậc cha mẹ, hãy sử dụng pstree(cài đặt nó nếu bạn không có nó):

$ pstree -sg 1234
systemd(1)───sshd(1036)───bash(2383)───pstree(3007)

Để có được cha mẹ của quá trình hiện tại, sử dụng echo $$.


1
pstreelà cái đẹp nhất tôi từng thấy ở đây.
sudo

ps jlà tuyệt vời vì nó có sẵn trên nhiều bản phát hành và có thể dễ dàng ghép lại
Connor McCormick

6

Đọc / Proc / $ PID / trạng thái. Có thể dễ dàng viết kịch bản:

#! / thùng / sh
P = $ 1
nếu [-z "$ P"]; sau đó
    đọc P
fi
mèo / Proc / "$ P" / trạng thái | grep PPid: | grep -o "[0-9] *"

2
grep '^PPid:' /proc/$1/status | grep -o '[0-9]*'là tất cả những gì bạn cần. ( Rất hiếm khi các công cụ Unix thực hiện công việc if [ -z ]; then readnày.)
grawity

@grawity Nó giúp làm những việc nhưecho $$ | ppid | ppid | ppid
Vi.

2
Sử dụng mèo vô dụng của UUOC
Felipe Alvarez

@FelipeAlvarez, Tay tôi không dùng để gõ < /some/file grep | grep | ....
Vi.

2
Điều gì vềgrep /some/file
Felipe Alvarez


2
$ ps -p $(ps -p $(echo $$) -o ppid=) -o comm=
    tmux

Một ví dụ phức tạp hơn một chút kiểm tra lệnh của cha mẹ đã bắt đầu quá trình hiện tại Thay đổi comm = thành cmd = để xem lệnh đầy đủ


Sử dụng tiếng vang vô dụng ? ;)
bobbogo

Nó thực sự được yêu cầu trên một số thiết bị đầu cuối. Thành thật mà nói tôi không nhớ chính xác nhưng nó thực sự đã giải quyết được một vấn đề. : D
sebastian_t

1

Đây là một giải pháp nhanh chóng cũng nên hoạt động:

ps $$

Điều đó không cung cấp cho cha mẹ PID, đó là những gì OP yêu cầu.
Dennis Williamson

1

Chạy topvới bất kỳ tùy chọn nào bạn muốn, thích -u username and -p PID.

Và trong khi topđang làm việc f, nó sẽ hiển thị một danh sách các tùy chọn bạn muốn hiển thị ở topđầu ra và các tham số được hiển thị sẽ được hiển thị bằng chữ cái VỐN và các tham số không hiển thị sẽ được hiển thị bằng chữ nhỏ.

Vì vậy, bằng cách nhập chữ cái trước tham số, bạn có thể bật hoặc tắt nó. Đối với ID tiến trình cha, bạn phải nhập bvà sau đó nhấn Enter, nó sẽ hiển thị PPID ở đầu ra hàng đầu.


1
Nó được sử dụng không tương tác. Tôi đã biết rằng trong htopbạn có thể cấu hình PPIDcột.
Vi.
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.