2016-11-30 93 views
0

all, 我在使用systemtap脚本时遇到问题。 我不知道如何在systemtap脚本中获取kill signal sender的主机名。例如, 。我在服务器'sf1'中执行kill -9 xclock_process_pid。同时,我运行1.stap -x xclock_process_pid来监视xclock, 在'sf1'中发送kill -9 xclock_process_pid时,是否有任何方法可以在systemtap脚本中获取服务器名称'sf1'?如何在systemtap脚本中获取kill signal sender的主机名

但我遇到一些问题。我的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'将reprot下面的错误你能帮我吗?语义错误:位置0处的探测点不匹配(可选项:__nfs __scheduler __signal __tcpmib __vm _linuxmib _signal _sunrpc _syscall _vfs begin begin(number)end end(number)error error(number)generic ioblock ioblock_trace ioscheduler ioscheduler_trace ipmib irq_handler kernel kprobe kprocess linuxmib module字符串)nd_syscall netdev永不nfs nfsd进程进程进程进程号字符串procfs procfs字符串调度程序scsi信号套接字softirq stap staprun sunrpc系统调用tcp tcpmib定时器tty udp vfs vm workqueue):标识符'oneshot'在systemtap.stap: 87:7解决探测点onehot来源:探测oneshot {^通过2:分析失败。再试一次“--vp 01”选项。

回答

0

换句话说,你在问如何获取当前机器的主机名。 TCP/IP级别的主机名不可及。这个sethostname(2)级别的名字不容易到达,隐藏在内核变量后面的锁定的utsname()->字段中。

如果安全不是一个问题,你可以通过内嵌的-C功能4.8时代的内核做到这一点:

function hostname:string() %{ 
    STAP_RETURN(current->nsproxy->uts_ns->name.nodename); 
%} 
probe oneshot { 
    log(hostname()) 
} 

,你会用stap -g ...(大师模式)运行。

+0

非常感谢第一。 – user1102185

+0

当我运行'stap -g 1.stap'会出现以上错误,请问我能检查一下吗? – user1102185

+0

好的,当添加“oneshot”探针别名时,您的systemtap版本必须大于2.5(2014-04-30)。使用'probe begin {log(....);退出()}'而不是。 – fche