跟踪子进程。
process-tracker的Python项目详细描述
过程跟踪器
进程跟踪器允许跟踪子进程的创建。
用法:
importprocess_tracker;process_tracker.install()importospid1=os.fork()pid2=os.fork()pid3=os.fork()ifpid1andpid2andpid3:print(process_tracker.children())
为每个进程打印带有(pid, create_time)
的元组列表。
create_time
可用于确认当前进程(如果有)
给定的PID与原始PID相同。例如:
importprocess_trackerimportpsutildefget_create_time(ctime):boot_time=psutil.boot_time()clock_ticks=os.sysconf("SC_CLK_TCK")returnboot_time+(ctime/clock_ticks)processes=[]forpid,create_timeinprocess_tracker.children():try:p=psutil.Process(pid=pid)exceptpsutil.NoSuchProcess:continueifp.create_time()==get_create_time(create_time):processes.append(p)# processes now has the list of active child processes# psutil itself does a check before sensitive operations that the# active process create time is the same as when the Process object# was initialized.forpinprocesses:p.terminate()
限制
- 仅跟踪从动态链接的可执行文件生成的子级。
- 依赖于
LD_PRELOAD
,因此对setuid/setgid可执行文件不起作用。
发展
基本
python -m venv .venv
.venv/bin/python -m pip install tox
- 进行更改
.venv/bin/python -m tox
调试C生成
避免生成sdist的开销
- 如上所述
make c-build
子进程的调试问题
子进程的gdb调试。
- 如上所述
make debug
在不重建的情况下调试测试
- 如上所述
.venv/bin/python -m pip install . .[dev]
然后
pip install . && pytest
需要重建时pytest
仅当测试更改时
释放
docker run \
-e REAL_UID=$(id -u) \
-e REAL_GID=$(id -g) \
-v "$PWD/scripts/build.sh:/build.sh" \
-v "$PWD:/src" \
dockcross/manylinux1-x64 \
sh -c 'cd /src && env "PATH=/opt/python/cp37-cp37m/bin:$PATH" /build.sh'