Làm thế nào tôi có thể hiển thị cây quy trình của thiết bị đầu cuối bao gồm cả trẻ em?


30

Khi một tập lệnh được khởi chạy từ dấu nhắc lệnh, shell sẽ sinh ra một quy trình con cho tập lệnh đó. Tôi muốn chỉ ra rằng mối quan hệ giữa quá trình cấp thiết bị đầu cuối và con cái của nó sử dụng pstrong đầu ra kiểu cây.
Tôi có thể làm cái này như thế nào?

Những gì tôi đã cố gắng cho đến nay

tập tin: script.sh

#!/bin/bash

ps -f -p$1

Sau đó, tôi gọi tập lệnh từ dòng lệnh đi qua trong id process của shell terminal:

$ ./script.sh $$

Những gì tôi muốn là một cái gì đó như thế này

  • quá trình vỏ cấp cao nhất (thiết bị đầu cuối)
  • ./script.sh
  • quá trình cho pslệnh riêng của mình
USER    PID  [..]
ubuntu 123     -bash
ubuntu 1234    \_ bash ./script.sh
ubuntu 12345      \_ ps auxf 

những gì tôi nhận được là:

  PID TTY      STAT   TIME COMMAND
14492 pts/24   Ss     0:00 -bash

2
Tại sao không sử dụng pstree?
muru

@muru Tôi đã thử pstreevà không thể làm cho nó tạo ra đầu ra có ý nghĩa, tôi nghĩ pstree $$chỉ sản xuất bash--pstreekhông chính xác những gì tôi đang tìm kiếm.
the_velour_fog

Làm thế nào nó không phải là những gì bạn đang tìm kiếm? Bạn đã thay thế tập lệnh và ps, vậy bạn còn mong đợi gì nữa ngoại trừ pstree?
muru

@muru quyền của bạn về mặt kỹ thuật những gì tôi muốn, nhưng quá tối thiểu. tức là làm thế nào để bạn biết chắc chắn những quá trình bạn đang xem mà không có bộ vi xử lý như ps cho thấy nó xuất ra bảng?
the_velour_fog

4
pstree -p $$? Hoặc, nếu bạn muốn thêm chương trình dòng lệnh , pstree -pa $$. Hoặc, nếu bạn muốn hiển thị tất cả các tiến trình cha mẹ đi lên , pstree -psa $$.
muru

Câu trả lời:


30

Thử

# ps -aef --forest
root     114032   1170  0 Apr05 ?        00:00:00  \_ sshd: root@pts/4
root     114039 114032  0 Apr05 pts/4    00:00:00  |   \_ -bash
root      56225 114039  0 13:47 pts/4    00:00:16  |       \_ top
root     114034   1170  0 Apr05 ?        00:00:00  \_ sshd: root@notty
root     114036 114034  0 Apr05 ?        00:00:00  |   \_ /usr/libexec/openssh/sftp-server
root     103102   1170  0 Apr06 ?        00:00:03  \_ sshd: root@pts/0
root     103155 103102  0 Apr06 pts/0    00:00:00  |   \_ -bash
root     106798 103155  0 Apr06 pts/0    00:00:00  |       \_ su - postgres
postgres 106799 106798  0 Apr06 pts/0    00:00:00  |           \_ -bash
postgres  60959 106799  0 14:39 pts/0    00:00:00  |               \_ ps -aef --forest
postgres  60960 106799  0 14:39 pts/0    00:00:00  |               \_ more

5
Câu hỏi ngụ ý tìm kiếm một cây quy trình bắt đầu từ một quy trình cụ thể, lấy $1đối số cho tập lệnh hoặc sử dụng $$để xem cây bắt đầu từ trình bao hiện tại ... Bạn có thể cập nhật câu trả lời của mình để bao gồm thông tin về cách lấy rừng bắt đầu từ một quy trình cụ thể?
filbranden

23

Tôi tìm thấy nó sau khi đọc câu trả lời siêu người dùng này , lưu ý nhận xét này

Nhưng không phải cho một PID (-p) vì nó chỉ in quy trình cụ thể, mà cho phiên (-g)

và thử nghiệm

ps f -g<PID>

kết quả

$ ./script.sh $$
  PID TTY      STAT   TIME COMMAND
14492 pts/24   Ss     0:00 -bash
 9906 pts/24   S+     0:00  \_ bash ./script.sh 14492
 9907 pts/24   R+     0:00      \_ ps f -g14492

3
từ trang người đàn ông:OUTPUT MODIFIERS: f ASCII-art process hierarchy (forest)
phyatt

1

Bạn có thể sử dụng lệnh ps f -g <PID>và stat quá trình root cho PID:

#> ps f -g 0

PID TTY      STAT   TIME COMMAND
2 ?        S      0:00 [kthreadd]
3 ?        S      0:01  \_ [ksoftirqd/0]
7 ?        S      0:19  \_ [rcu_sched]

1

Thử đi:

 $ ps -afx
  PID TTY      STAT   TIME COMMAND
    2 ?        S      0:00 [kthreadd]
    4 ?        I<     0:00  \_ [kworker/0:0H]
    6 ?        I<     0:00  \_ [mm_percpu_wq]
    7 ?        S      0:14  \_ [ksoftirqd/0]
    8 ?        I      0:34  \_ [rcu_sched]
    9 ?        I      0:00  \_ [rcu_bh]
   10 ?        S      0:00  \_ [migration/0]
   11 ?        S      0:00  \_ [watchdog/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.