strace에서 다른 창으로 출력

strace에서 다른 창으로 출력

내가 어떻게 이해하고 싶다고 가정 해 봅시다.캐내다작품:스트레스.

strace출력을 다른 창으로 리디렉션할 수 있습니까 ?

따라서 두 개의 창을 가질 수 있습니다. 하나는 모든 상호 작용을 수행하는 창이고 다른 하나는 strace출력용 창입니다.

답변1

strace -p한 창에서 이를 사용하여 다른 창에서 실행 중인 명령을 추적할 수 있습니다. 이 -p옵션은 하나 이상의 프로세스 ID를 허용하므로 다음을 시도해 볼 수 있습니다.

strace -p "$(pidof pry)"

pidof로 식별된 프로세스가 하나 이상 있는 경우 pry실험해야 할 수 있으며 ( 대신 사용해야 하는 명령을 pidof추적하려는 경우 ), 이와 관련된 모호성이 있는 경우 을 사용하는 것이 최선의 접근 방식이 아닐 수 있습니다. 일치하는 명령이 여러 개 있지만 그중 하나만 필요합니다). 올바른 프로세스를 찾고 옵션을 직접 제공하는 것이 더 쉬울 수도 있습니다 .pudb3python3pudb3pidofstraceps

이 접근 방식은 수명이 짧은 프로세스나 프로세스 수명 초기에 출력을 확인하는 것이 중요한 경우에는 적합하지 않지만 시작 시간이 특별히 흥미롭지 않은 대화형 애플리케이션에는 적합할 수 있습니다.

strace -p이를 사용하는 것과 strace사용하지 않는 것의 차이점 중 하나 -p는 인터럽트를 처리하는 방법입니다. 에 의해 시작된 프로세스에는 strace유사한 Ctrl-C인터럽트가 전달되고 에 의해 보고 strace되지만 Ctrl-C에서는 strace -p프로세스를 분리하고 추적 없이 프로세스를 계속할 수 있습니다( Ctrl-C응용 프로그램이 별도의 창에 있는 경우 여전히 응용 프로그램 작업에 있을 수 있음). .

답변2

단기 프로세스 또는 프로세스 수명주기 초기에 출력을 확인하는 것이 중요한 경우 래퍼 메서드는 다음과 같습니다.

#!/bin/sh

# the pid could be sent to a file or named pipe the-thing-that-does-
# strace could be watching, though in most cases a human could copy it
echo "PID to strace is $$"

trap : USR2

# block while human copies pid over to strace (or some program acts on
# the above pid being written in that other terminal). Busy loop or
# something instead if this program must not consume input (`sleep`
# complicates the signal handling)
read blocking

# then when strace is up, send this process a USR2 signal. this will
# mean there will be some strace of this script in addition to the
# target, hence the kinda sorta caveat.
exec echo /the/program/of/interest

또는 sysdig다른 터미널 창에서 프로그램을 실행하여 sysdig이름으로 직접 프로그램을 감시할 수 있습니다 .

sysdig -p '%proc.name %evt.type(%evt.args)' \
    proc.name contains /the/program/of/interest

관련 정보