全部 使用systemtap脚本时遇到问题。 我不知道如何在systemtap脚本中获取kill signal sender的主机名。 例如。我在服务器' sf1'中执行kill -9 xclock_process_pid。同时,我运行1.stap -x xclock_process_pid来监控xclock, 是否有任何方法来获取服务器名称' sf1'在systemtap脚本中发送kill -9 xclock_process_pid' sf1'?
但我遇到了一些问题。我的1.stap如下所示:
#!/usr/bin/env stap
function hostname:string () %{
STAP_RETURN(current->nsproxy->uts_ns->name.nodename);
%}
probe oneshot {
log(hostname())
}
当我运行' stap -g 1.stap'将重新报告以下错误你能帮帮我吗?语义错误:位置0处的探测点不匹配(替代方法:__nfs __scheduler __signal __tcpmib __vm _linuxmib _signal _sunrpc _syscall _vfs开始(编号)结束(编号)错误错误(编号)通用ioblock ioblock_trace ioscheduler ioscheduler_trace ipmib irq_handler内核kprobe kprocess linuxmib模块( string)nd_syscall netdev never nfs nfsd perf process process(number)process(string)procfs procfs(string)scheduler scsi signal socket softirq stap staprun sunrpc syscall tcp tcpmib timer tty udp vfs vm workqueue):identifier' oneshot' at systemtap.stap:87:7同时解析探测点oneshot源:探测oneshot {^ Pass 2:分析失败。再试一次' - vp 01'选项。
答案 0 :(得分:0)
换句话说,您正在询问如何获取当前计算机的主机名。 TCP / IP级主机名无法访问。 sethostname(2)
级别名称不容易到达,隐藏在锁定utsname()->
字段后面的内核变量中。
如果安全性不是问题,你可以通过4.8内核的嵌入式C函数来实现:
function hostname:string () %{
STAP_RETURN(current->nsproxy->uts_ns->name.nodename);
%}
probe oneshot {
log(hostname())
}
您将使用stap -g ...
(大师模式)运行。