背景
我在写C的共享库,动态链接的LD_PRELOAD,即是为了截取并覆盖从应用网络调用预加载它,例如socket(),connect(),recv(),send(),等.
在库的init中,我启动了一个线程pthread_create().该线程轮询一些内核内存,该内存映射到用户空间.
该库旨在通用,足以处理 - 但不限于 - 网络基准应用程序,如netperf,iperf,sockperf.
我的问题
一切都很好,大多数情况下生活都很甜蜜,除了一个.Deamonized应用程序.例如,如果我将netserver(netperf基准测试应用程序的服务器端)作为deamon启动,即没有-D参数,则应用程序执行的第一件事就是调用fork().在fork上,父关闭使用exit(EXIT_SUCCESS),子监听连接.父退出的事实会导致我的轮询线程被杀死.
所以我想要实现的是让孩子在父母已经离开的情况下产生一个新的轮询线程.我可以拦截和覆盖fork()电话,但从根本上说,我怎样才能让孩子知道父母是否已经离开?我不能采取任何假设,因为库必须是通用的.
谢谢.
我有一个排序的numpy浮动数组,我想绘制.我想在x轴上打印百分位数.我知道如何获得百分位值.
这是我的,但我不知道如何处理我的百分位数值:
import numpy as np
import pylab as P
import matplotlib as mp
d = np.loadtxt("report.stats.sorted")
pct = mp.mlab.prctile(d, p=(0.0, 10.0, 25.0, 50.0, 75.0, 90.0, 100.0))
P.plot(d)
P.show()
Run Code Online (Sandbox Code Playgroud)
该图显示了一条漂亮的曲线,但x轴显示了带有条目数的刻度.我想要的是在适当的位置显示[0.0,25.0,50.0,75.0,100.0]的刻度.
对不起,如果不清楚的话.
我在用户空间库,拦截套接字层调用,如socket(),connect(),accept(),等我只处理TCP套接字.
在内核空间中我有一个网络内核模块,它处理所有的TCP连接.我需要能够在驱动程序中识别用户空间库拦截了哪些套接字.
到目前为止,我一直在使用(Kernel)中我可以在User Space中设置的priority字段.但这是一个非常肮脏的黑客.struct socksetsockopt()
是否有任何类型的私人领域,struct sock我可以安全地使用和设置从用户空间通过setsockopt()?
谢谢.