#include <assert.h>
#include <stdbool.h>
#include <sys / types.h>
#include <unistd.h>
#include <sys / sysctl.h>
static bool AmIBeingDebugged(void)
//如果正在调试当前进程,则返回true(或者
//在调试器下运行或事后连接调试器)。
{
int junk;
你NEI [4];
struct kinfo_proc info;
size_t大小;
//初始化标志,以便,如果sysctl失败了一些奇怪的事情
//原因,我们得到了可预测的结果。
info.kp_proc.p_flag = 0;
//初始化mib,在这种情况下告诉sysctl我们想要的信息
//我们正在寻找有关特定进程ID的信息。
mib [0] = CTL_KERN;
mib [1] = KERN_PROC;
mib [2] = KERN_PROC_PID;
mib [3] = getpid();
//调用sysctl。
size = sizeof(info);
junk = sysctl(mib,sizeof(mib)/ sizeof(* mib),&info,&size,NULL,0);
断言(垃圾== 0);
//如果设置了P_TRACED标志,我们正在调试。
return((info.kp_proc.p_flag&P_TRACED)!= 0);
}
重要说明: 由于kinfo_proc结构(in