如何在systemtap脚本中获取kill signal sender的主机名

时间:2016-11-30 16:33:45

标签: kill hostname systemtap

全部 使用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'选项。

1 个答案:

答案 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 ...(大师模式)运行。