2016-11-30 13 views
0

모두 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 신호 발신자의 호스트 이름을 얻는 방법

하지만 문제가 발생했습니다. 난 당신이 나를 도울 수 다음과 같은 오류가 reprot 것 '-g 1.stap을 STAP'실행할 때

#!/usr/bin/env stap 
function hostname:string() %{ 
    STAP_RETURN(current->nsproxy->uts_ns->name.nodename); 
%} 
probe oneshot { 
    log(hostname()) 
} 

: 내 1.stap는 다음과 같습니다? 의미 오류 : 위치 0에서 프로브 포인트 불일치 (대안 : __nfs __scheduler __signal __tcpmib __vm _linuxmib _signal _sunrpc _syscall _vfs 시작 시작 (번호) end end (번호) 오류 오류 (번호) 일반 ioblock ioblock_trace ioscheduler ioscheduler_trace ipmib irq_handler 커널 kprobe kprocess linuxmib 모듈 문자열) nd_syscall netdev 절대 nfs nfsd perf 프로세스 프로세스 (번호) 프로세스 (문자열) procfs procfs (문자열) 스케줄러 scsi 신호 소켓 softirq 스톱 스왑 sunrpc syscall tcp tcpmib 타이머 tty udp vfs VM workqueue) : 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