मैं बच्चों सहित एक टर्मिनल शेल की प्रक्रिया का पेड़ कैसे दिखा सकता हूं?


30

जब कोई स्क्रिप्ट कमांड प्रॉम्प्ट से लॉन्च की जाती है, तो शेल उस स्क्रिप्ट के लिए एक उपप्रकार स्पॉन करेगा। मैं psट्री स्टाइल आउटपुट में टर्मिनल स्तर की प्रक्रिया और उसके बच्चों के बीच संबंध दिखाना चाहता हूं ।
मैं यह कैसे कर सकता हूँ?

मैंने अब तक क्या कोशिश की है

फ़ाइल: script.sh

#!/bin/bash

ps -f -p$1

फिर मैं टर्मिनल शेल की प्रक्रिया आईडी में पास होने वाली कमांड लाइन से स्क्रिप्ट को आमंत्रित करता हूं:

$ ./script.sh $$

मैं जो चाहता हूं वह कुछ इस तरह है

  • शीर्ष स्तर (टर्मिनल) शेल प्रक्रिया
  • ./script.sh
  • psखुद के लिए प्रक्रिया
USER    PID  [..]
ubuntu 123     -bash
ubuntu 1234    \_ bash ./script.sh
ubuntu 12345      \_ ps auxf 

Im क्या हो रहा है:

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

2
उपयोग क्यों नहीं pstree?
मूरू

@ मरमू मैंने कोशिश की pstreeऔर इसे सार्थक आउटपुट देने के लिए नहीं मिला, मुझे लगता है कि pstree $$सिर्फ bash--pstreeवही नहीं जो मैं देख रहा था।
the_velour_fog

यह वह नहीं है जो आप खोज रहे हैं? आपने स्क्रिप्ट को बदल दिया है और psइसलिए आपको इसके अलावा और क्या देखने की उम्मीद है pstree?
मूरू

@ अपने तकनीकी रूप से अपने अधिकार को जो मैं चाहता था, लेकिन बहुत कम। यानी आपको यह कैसे पता चलेगा कि आप पीआईडी ​​के बिना किन प्रक्रियाओं को देख रहे हैं जैसे पीएस इसे टेबल आउटपुट दिखाता है?
the_velour_fog

4
pstree -p $$? या, यदि आप कमांड लाइन शो के अधिक चाहते हैं pstree -pa $$,। या, यदि आप सभी मूल प्रक्रियाओं को दिखाना चाहते हैं, तो pstree -psa $$
मूरू

जवाबों:


30

प्रयत्न

# 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
प्रश्न का तात्पर्य एक विशिष्ट प्रक्रिया से शुरू होने वाले पेड़ की तलाश है, $1एक स्क्रिप्ट पर तर्क करना या $$वर्तमान शेल पर शुरू होने वाले पेड़ को देखने के लिए उपयोग करना ... क्या आप अपना जवाब अपडेट कर सकते हैं कि कैसे एक जंगल शुरू करने के बारे में जानकारी शामिल करें। एक विशिष्ट प्रक्रिया?
फाइलब्रांडेन

23

मुझे यह टिप्पणी देखने के बाद , इस शानदार जवाब को पढ़ने के बाद मिला

लेकिन पीआईडी ​​(-पी) के लिए नहीं क्योंकि यह केवल विशिष्ट प्रक्रिया को प्रिंट करता है, लेकिन सत्र के लिए (-जी)

और प्रयोग

ps f -g<PID>

परिणाम

$ ./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
मैन पेज से:OUTPUT MODIFIERS: f ASCII-art process hierarchy (forest)
फाइट

1

आप कमांड का उपयोग कर सकते हैं ps f -g <PID>और इसके लिए रूट प्रक्रिया को स्टेट कर सकते हैं 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

इसे इस्तेमाल करे:

 $ 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]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.