2016-11-30 95 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