2016-11-30 15 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'を取得する方法はありますか?システムタップスクリプトでkillシグナル送信者のホスト名を取得する方法

でも問題が発生しています。私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(番号)endエラー番号(番号)汎用ioblock ioblock_trace ioscheduler ioscheduler_trace ipmib irq_handlerカーネルkprobe kprocess linuxmib module (string))nd_syscall netdev never nfs nfsdプロセスプロセス(番号)プロセス(文字列)procfs procfs(文字列)スケジューラscsiシグナルソケットsoftirq staprun sunrpc syscall tcp tcpmibタイマーtty udp vfs VMワークキュー):systemtap.stapの識別子 'oneshot'プローブポイントを解決している間に87:7ソース:プローブoneshot {^パス2:解析に失敗しました。別の '--vp 01'オプションでもう一度試してください。

答えて

0

つまり、現在のマシンのホスト名を取得する方法を聞いています。 TCP/IPレベルのホスト名は届いていません。 sethostname(2)のレベル名は、ロックされたutsname()->フィールドの後ろにあるカーネル変数の中に隠れているのは簡単ではありません。安全性に問題がなかった場合は

、あなたはそれが4.8時代のカーネル用の組み込みC関数を経由して行うことができます:

あなたが stap -g ...(教祖モード)で実行されます
function hostname:string() %{ 
    STAP_RETURN(current->nsproxy->uts_ns->name.nodename); 
%} 
probe oneshot { 
    log(hostname()) 
} 

+0

ありがとうございます。 – user1102185

+0

私が 'stap -g 1.stap'を実行すると、上記のエラーが再現されます。確認してもらえますか? – user1102185

+0

"oneshot"プローブエイリアスが追加されたら、システムタップのバージョンが2.5(2014-04-30)より古い必要があります。 'probe begin {log(....);}を使います。代わりにexit()} 'を実行します。プローブを使用すると – fche

関連する問題