Bir terminal kabuğunun çocukları içeren bir işlem ağacını nasıl gösterebilirim?


30

Komut isteminden bir komut dosyası başlatıldığında, kabuk bu komut dosyası için bir alt işlem oluşturur. psBir ağaç stili çıktısında kullanan terminal seviye süreci ile çocukları arasındaki bu ilişkiyi göstermek istiyorum .
Bunu nasıl yapabilirim?

Şimdiye kadar ne denedim

dosya: script.sh

#!/bin/bash

ps -f -p$1

Sonra komut dosyasını terminal kabuğunun işlem kimliğinden geçen komut satırından çağırdım:

$ ./script.sh $$

İstediğim şey böyle bir şey

  • üst seviye (terminal) kabuk işlemi
  • ./script.sh
  • pskomutun kendisi için işlem
USER    PID  [..]
ubuntu 123     -bash
ubuntu 1234    \_ bash ./script.sh
ubuntu 12345      \_ ps auxf 

ne alıyorum:

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

2
Neden kullanmaz pstree?
muru

@muru pstreeAnlamlı çıktılar elde etmeyi denedim ve elde edemedim, pstree $$sadece bash--pstreetam olarak aradığım şeyi üretmedim .
the_velour_fog

Aradığın şey nasıl değil? Senaryoyu değiştirdiniz ve pspeki bunun dışında başka ne görmeyi umuyorsunuz pstree?
muru

@muru hakkın teknik olarak istediğim şeydi, ama çok az. yani, ps gibi bir PID olmadan hangi süreçlere baktığınızdan emin olduğunuzu nasıl bildiğini biliyorsunuz?
the_velour_fog

4
pstree -p $$? Veya komut satırından daha fazlasını görmek istiyorsanız pstree -pa $$,. Veya, tüm ebeveyn işlemlerinin yukarı gittiğini göstermek istiyorsanız pstree -psa $$,.
muru

Yanıtlar:


30

Deneyin

# 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
Soru, belirli bir işlemde başlayan bir işlem ağacını aramak, $1bir senaryoyu tartışmak veya $$mevcut kabuktan başlayarak ağaca bakmak için kullanmak anlamına geliyordu. belirli bir süreç?
filbranden

23

Bu süper kullanıcı cevabını okuduktan sonra , bu yorumu not ederek buldum

Ancak PID (-p) için değil, yalnızca belirli bir işlemi basar, ancak oturum için (-g)

ve deneme

ps f -g<PID>

sonuç

$ ./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
man sayfasından:OUTPUT MODIFIERS: f ASCII-art process hierarchy (forest)
phyatt 16:17

1

Komutu kullanabilir ps f -g <PID>ve kök işlemi için PIDşunları yapabilirsiniz:

#> 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

Bunu dene:

 $ 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]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.