| HOME / 정보공유 / AIX 명령어 모음

truss
truss truss 명령 목적 프로세스의 시스템 호출, 수신된 신호 및 발생된 기계적 결함을 추적합니다. 구문
truss [ -f] [ -c] [ -a] [ -e] [ -i] [ { -t | -x} [!] Syscall [...] ] [ -s [!] Signal [...] ] [ -m [!] Fault [...]] [ { -r | -w} [!] FileDescriptor [...]] [ -o Outfile] {Command| -p pid [. . .]}
설명
truss 명령은 지정된 명령을 실행하거나 나열된 프로세스 ID에 연결합니다. 그리고, 시스템 호출, 받은 신호, 및 프로세스가 생성한 기계적 결함에 대한 추적을 생성합니다. 추적 출력의 각 행은 Fault 또는 Signal 이름, 또는 Syscall 이름이 매개변수 및 리턴 값과 함께 보고됩니다. 시스템 라이브러리에 정의된 서브루틴은 반드시 커널에 만든 시스템 호출일 필요는 없습니다. truss 명령은 이 서브루틴을 보고하지 않으나 이들이 만든 기초 시스템 호출을 보고합니다. 가능하다면 시스템 호출 매개변수는 관련된 시스템 헤더 파일의 정의를 사용해서 기호로 표시됩니다. 경로 이름 포인터 매개변수에 대해, truss는 지적된 문자열을 표시합니다. 디폴트로, 정의되지 않은 시스템 호출이 이름, 모든 여덟 가지 가능 argments, 및 16진수의 리턴 값과 함께 표시됩니다.
-o 플래그가 truss와 함께 사용되었거나, 표준 오류가 터미널이 아닌 파일로 재지정되었을 때, truss는 정지, 인터럽트 및 신호 프로세스를 무시합니다. 이는 터미널로부터 인터럽트와 중지 신호를 받는 대화식 프로그램의 추적을 용이하게 합니다.
추적 출력이 터미널로 지정되거나 기존 프로세스가 추적될 경우(-p 플래그를 사용), truss는 모든 추적 프로세스를 해제하고 종료함으로써 정지, 인터럽트 및 중지 신호에 응답합니다. 이것은 사용자가 과도한 추적 출력을 종료하고 기존의 프로세스를 해제할수 있게 합니다. 해제된 프로세스는 계속 정상 기능을 수행합니다.
리스트 인수를 가지는 이런 옵션의 경우, all이란 이름을 리스트의 모든 가능한 멤버를 지정하는 단축어로 사용할 수 있습니다. 리스트가 !로 시작할 경우, 옵션의 의미는 무효가 됩니다(예를 들어, 추적하지 않고 배제시킵니다). 같은 옵션의 여러 번 중복사용을 지정할 수 있습니다. 리스트내의 같은 이름에 대해서, 수반되는 옵션(오른쪽의 옵션)은 이전 옵션(왼쪽의 옵션)을 겹쳐씁니다.
페이지 부재를 제외한 모든 기계적 결함은 결함을 일으킨 프로세스에 신호를 통지합니다. 받은 신호의 보고서는 그 신호가 프로세스에 의해 블록되지 않는 한, 즉시 각 기계적 결함 보고서에 따라 옵니다.
다른 제어 프로세스와의 충돌을 피하기 위해, truss는 발견한 프로세스가 /proc 인터페이스를 가지는 다른 프로세스에 의해 제어될 경우 프로세스를 추적하지 않습니다.
여러 개 프로세스에 대한 추적 출력은 정확한 시간 순서대로 생성되지 않습니다. 예를 들어, 파이프에 대한 읽기가 대응하는 쓰기보다 앞서 보고될 수 있습니다. 하지만, 각 프로세스에 대해 출력은 정확히 시간순서에 따릅니다. 추적 출력은 탭 문자를 포함하며 표준 탭 정지가 각 여덟번째 위치에 설정됩니다.
하위 추적시 시스템은 per-user 프로세스 슬롯이 부족할 수 있습니다. 이것은 하나 이상의 프로세스를 추적할 때, truss가 추적하는 각 프로세스에 대해 하나의 제어 프로세스처럼 작동하고, 주어진 프로세스에 사용된 프로세스 슬롯의 수를 두 배로 하기 때문입니다. 보통 시스템에 부과된 한계인 사용자에 25 프로세스는 여러 개 프로세스에 추적을 수행하기 전에 고려되어야 합니다.
-f 플래그와 -p 플래그를 하나 이상의 프로세스 ID와 함께 사용할 때와 같이, 하나 이상의 프로세스를 다룰 때, truss는 공유 메모리와 세마포어를 사용합니다. 필요하다면 시스템이 구성설정되지 않았더라도 이런 추적을 수행할 수 있습니다. 이 경우, truss는 경고 메세지를 내보내고 추적을 계속합니다. 하지만, 추적 출력이 외곡될 수 있으며, -c 플래그의 출력은 최상위 명령 또는 첫번째 프로세스 ID만을 보고하며 하위는 제외됩니다.
운영 시스템은 프로세스의 추적에 대해 어떤 보안 제한을 시행합니다. 추적하고 있는 명령에 대한 특권을 액세스해야 합니다. set-uid와 set-gid 프로세스는 특권 사용자에 한해서만 추적가능합니다. 특권 사용자에 의해 수행되지 않을 경우, truss 명령은 set-id 또는 읽기불가 오브젝트 파일의 실행을 이행하는 어떤 프로세스도 제어 할 수 없습니다. 이 추적되지 않은 프로세스는 실행 시점에서부터 truss와 무관하게, 정상적으로 진행됩니다.
플래그
-a 각각의 실행된 시스템 호출에서 패스된 매개변수 문자열을 표시합니다.
-c 추적 결과를 한 행씩 표시하지 않고, 추적된 시스템 호출, 결함 및 신호를 계산합니다. 추적된 명령이 끝나거나 truss가 인터럽트되었을 때 요약 보고서가 만들어집니다. -f 플래그도 사용되었을 경우, 갯수는 추적된 하위 프로세스의 Syscall, Fault, 및 Signal을 모두 포함합니다.
-e 각각의 실행된 시스템 호출에서 패스된 환경 문자열을 표시합니다.
-f 분기 실행(fork) 시스템 호출이 작성한 모든 하위를 따르며 추적 출력에서 신호, 결함 및 시스템 호출을 포함합니다. 보통은, 오직 제 1 레벨 명령 또는 프로세스만이 추적됩니다. -f 플래그가 지정되었을 때, 프로세스 ID는 추적 출력의 각 행에 포함되어서, 어떤 프로세스가 시스템 호출을 실행하거나 신호를 받았는지를 보여줍니다.
-i 활동하지 않는 시스템 호출을 표시하지 않게 합니다. open과 kread와 같은, 터미널 장치 또는 파이프에 대한 특정 시스템 호출은 무한정의 기간동안 활동 중지될 수 있으며, 인터럽트가 가능합니다. 보통, truss는 1초 이상 활동 정지상태로 있을 경우, 이런 활동하지 않는 시스템 호출을 보고합니다. 완료시 시스템 호출은 두 번 보고됩니다. -i 플래그는 이런 시스템 호출이 완료시 한 번만 보고되도록 합니다.
-m [!] Fault 추적하거나 제외할 기계적 결함. 나열된 기계적 결함은 각각 쉼표로 구분되어야 합니다. 결함은 이름 또는 번호로 지정될 것입니다(sys/fault.h 헤더 파일을 보십시오). 리스트가 "!" 기호로 시작될 경우, 지정된 결함은 추적 출력에 표시되지 않습니다. 디폴트는 -mall입니다.
-o Outfile 추적 출력에 사용되도록 파일을 지정합니다. 디폴트로 출력은 표준 오류로 이동합니다.
-p truss에 대한 매개변수를 실행될 명령이 아니라 존재하는 프로세스에 대한 프로세스 ID 리스트로 해석합니다. 사용자 ID와 프로세스의 그룹 ID가 사용자의 것과 일치하거나 사용자가 특권 사용자일 경우, truss가 각 프로세스를 제어하며 추적을 시작합니다.
-r [!] FileDescriptor 각 지정된 파일 설명자에 대한 읽기를 위한 I/O 버퍼의 전체 내용을 표시합니다. 출력은 1행에 32 바이트의 형식이며, ASCII 문자(preceded by one blank) 또는 제어 문자의 경우 수평 탭(\t) 및 새로운 행(\n)과 같은 2자 C 언어 escape 문자열로 각 바이트를 표시합니다. ASCII 해석이 불가능할 경우, 바이트는 2자 16진수 표기로 표시됩니다. -r 플래그가 없어도, 각 추적된 읽기에 대한 I/O 버퍼의 최초 16 바이트가 표시됩니다. 디폴트는 -r!all입니다.
-s [!] Signal 추적하거나 제외할 신호를 나열할 수 있게 합니다. 리스트의 지정된 신호는 (쉼표로 구분) 추적됩니다. 추적 출력은 프로세스에 의해 신호가 무시되었으나 블록되지 않았을 경우에도 각 지정된 신호의 수취를 보고합니다. 블록된 신호는 프로세스가 이를 릴리즈하기 전까지는 수신되지 않습니다. 신호는 이름 또는 번호로 지정될 것입니다(sys/signal.h를 보십시오). 리스트가 "!" 기호로 시작할 경우, 나열된 신호는 추적 출력으로 표시되지 않습니다. 디폴트는 -s all입니다.
-t [!] Syscall 추적 프로세스에서 시스템 호출을 포함하거나 제외시킵니다. 추적될 시스템 호출은 쉼표로 구분해서 리스트에 지정되어야 합니다. 리스트가 "!" 기호로 시작되면, 지정된 시스템 호출은 추적 출력에서 제외됩니다. 디폴트는 -tall입니다.
-w [!] FileDescriptor 각 나열된 파일 설명자에 대한 쓰기를 위한 I/O 버퍼의 내용을 표시합니다(-r를 보십시오). 디폴트는 -w!all입니다.
-x [!] Syscall 보통 기호표기보다는 16진수의 원시 형식으로 추적된 시스템 호출의 지정된 매개변수로부터 데이터를 표시합니다. 디폴트는 -x!all입니다.
예제
터미널의 find 명령을 추적하려면, 다음과 같이 입력하십시오.
truss find . -print >find.out
lseek, close, statx 및 open system call을 추적하려면, 다음과 같이 입력하십시오.
truss -t lseek,close,statx,open find . -print > find.out
파일
/proc 파일시스템
관련 정보
분기 실행(fork) 서브루틴.
/proc 파일.