2012-10-12 36 views
6

pstree PID có thể hiển thị tất cả thông tin quy trình con của quy trình được chỉ định bởi PID. Tuy nhiên, tôi cũng muốn biết tất cả thông tin về quy trình phụ huynh của quy trình PID, làm cách nào tôi có thể nhận được thông tin này?cách nhận tất cả các quy trình gốc và tất cả các quy trình con theo lệnh `pstree`

Một ví dụ, đưa ra dưới đây quá trình:

 
init 
|- parent_process 
| `- current_process 
|  |- subprocess_1 
|  `- subprocess_2 
`- other_process 

Những gì tôi muốn là khi tôi chạy pstree current_process_pid, tôi muốn nhận được dưới đây sản lượng

 
init 
`- parent_process 
    `- current_process 
     |- subprocess_1 
     `- subprocess_2 

Khi tôi chạy pstree subprocess_1_pid, nó sẽ ra

 
init 
`- parent_process 
    `- current_process 
     `- subprocess_1 

Cảm ơn trước

+0

Bạn đã thử với 'ps -ef' chưa? – gks

+0

Lưu ý: Sử dụng tùy chọn -l của lệnh pstree/ps hiển thị các dòng dài với các đối số dòng lệnh của quy trình. Hữu ích khi bạn muốn theo dõi các đối số dòng lệnh cho mỗi quá trình và xem lệnh/tập lệnh nào được kích hoạt (ví dụ: tìm ra tập lệnh phụ trợ nào được chạy cho hoạt động của giao diện người dùng web). – GuruM

Trả lời

9
# With my psmisc 22.20: 
pstree -p -s PID 

Có lẽ nếu với ps ef:

awk -vPID=$1 ' 
function getParent (pid) { 
    if (pid == "" || pid == "0") return; 
    while ("ps -ef | grep "pid | getline) { 
     if ($2 == pid) { 
      print $8"("$2") Called By "$3; 
      getParent($3); 
      break; 
     } 
    } 
    close ("ps -ef") 
} 

BEGIN { getParent(PID) } 
' 

này là xấu xí giả sử cột đầu ra ps và trật tự. Trên thực tế, một lần chạy ps -ef chứa mọi thông tin cần thiết. Điều này không xứng đáng với thời gian, tôi vẫn khuyên bạn nên cập nhật psmisc, nó sẽ không bị tổn thương.

EDIT: Một bắt chước sử dụng đơn chạy ps ef:

ps -ef | awk -vPID=$1 ' 
function getpp (pid, pcmd, proc) { 
    for (p in pcmd) { 
     if (p == pid) { 
      getpp(proc[p], pcmd, proc); 
      if (pid != PID) printf("%s(%s)───", pcmd[pid], pid); 
     } 
    } 
} 

NR > 1 { 
    # pid=>cmd 
    pcmd[$2] = $8; 
    # pid=>Parent 
    pproc[$2] = $3; 
} 

END { 
    getpp(PID, pcmd, pproc); 
    printf "\n"; 
    system("pstree -p "PID); 
}' 
+3

'-s' tùy chọn không được hỗ trợ bởi' pstree' của tôi được cài đặt bởi 'psmisc-22.2-7.el5_6.2' –

+2

Như một ghi nhớ tôi nhớ args như' laps' như trong 'pstree -laps ' để có được chi nhánh với thông tin bổ sung. – haridsv

2

tôi thấy laps tùy chọn được đề cập bởi @haridsv (pstree -laps <pid>) là một giải pháp. Đó là một chút chi tiết cho tôi mặc dù, vì vậy tôi sẽ dính vào một sản lượng ngắn hơn aps.

Các vấn đề liên quan