Есть ли способ в узлах или сценариях оболочки, чтобы узнать, запускает ли дочерний процесс свой собственный подпроцесс? - PullRequest
0 голосов
/ 18 мая 2019

Допустим, у меня есть простой однострочный скрипт test.sh, который запускает какой-то другой процесс, например npm start или python server.py.

Теперь скажите, что я запускаю этот сценарий оболочки из программы родительского узла, то есть ::1006*

let child = process.spawn("./test.sh");

Есть ли способ для процесса узла отслеживать процессы, запускаемые этим сценарием оболочки? Скажем, я хочу получить pid процесса python или npm и отслеживать его жизненный цикл.

В равной степени полезно знать, есть ли способ для сценария оболочки, чтобы сделать это, потому что я мог бы написать сценарий оболочки для запуска другого сценария оболочки, а затем сделать так, чтобы мой проект узла запускал мой сценарий оболочки как человек-в-команде. the-middle .... так что если это может сделать либо оболочка, либо узел, то так или иначе работает.

Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 18 мая 2019

В Linux вы можете strace целевой процесс и искать fork системных вызовов.

Подобные методы, вероятно, возможны на большинстве других платформ, хотя детали будут отличаться. На некоторых платформах вам нужно root или эквивалентные привилегии для проверки внутренних компонентов процесса, даже если он принадлежит вам.

0 голосов
/ 18 мая 2019

Вы можете перечислить всех потомков процесса, используя что-то подобное в python и указав PID родителя в качестве первого аргумента

#! /usr/bin/env python

import sys
import psutil

for child in psutil.Process(int(sys.argv[1])).children(recursive=True):
    print(child.pid)
...