Я бы попробовал использовать
аудит-хук.
Многие функции питона генерят события аудита, на которые можно подписаться.
Есть полная
таблица событий для CPython, но тебя будут интересовать события типа
subprocess.Popen
,
os.system
,
os.spawn
,
os.startfile
,
os.exec
,
os.fork
и так далее.
Внутри хука можешь попробовать вызвать
traceback.format_stack() чтобы узнать текущий стек вызовов, и записать его в какой-нибудь журнал работы.
import sys
import traceback
# хук который ловит событие импорта модуля
def hook(event, args):
if event != 'import':
return
name, filename = args[0], args[1]
callstack = traceback.extract_stack(limit=None)
print(event, name, filename)
for item in traceback.format_list(callstack):
print(' ', item.strip())
sys.addaudithook(hook)
import json
print('Done')
Это сработает только если процессы спавнятся средствами питона, а не каким-нибудь скомпилированным расширением.
Также можешь поискать использование модуля multiprocessing, это тоже вероятный кандидат.