나는 다음 명령을 실행하고 있습니다 :
strace -f -e trace=desc ./my-program
(그래서 내가 -f
매개변수를 실행하고 있다는 것을 알 수 있습니다)
write
이를 통해 상위 프로세스의 stdout/stderr 명령을 볼 수 있습니다 .
[pid 10] 07:36:46.668931 write(2, "..\n"..., 454 <unfinished ...>
<stdout of ..>
<stdout other output - but I don't see the write commands - so probably from a child process>
[pid 10] 07:36:46.669684 write(2, "My final output\n", 24 <unfinished ...>
<stdout of My final output>
내가 보고 싶은 것은 다른 쓰기 명령입니다.
이는 도커 컨테이너에서 실행되며 다음과 같이 실행됩니다.
docker run --privileged=true my-label/my-container
내 질문은 다음과 같습니다Docker 컨테이너 내의 모든 하위 프로세스에 대한 모든 쓰기 호출(stdout/stderr에 대한)을 추적하는 방법은 무엇입니까?
편집: 이 애플리케이션을 시작하고 중지하는 데 약 2초가 소요됩니다. strace
적용주기를 따를 수 있습니다. 그러나 서버 프로세스처럼 작동할 것으로 예상하는 도구는 작동하지 않습니다. (어쩌면 sysdig
이를 위해 사용될 수도 있지만 아직 이 모델의 예를 본 적이 없습니다.)
답변1
문자열 출력이 잘리는 것으로 나타났습니다 strace
. 처음 n(10?) 문자열 문자 이상을 원한다고 명시적으로 알려야 합니다. 당신은 이런 일을 하곤 해요 -s 800
.
strace -s 800 -ff ./myprogram
명시적 요청을 write
사용하여 모든 명령을 얻을 수도 있습니다 .strace
-e write
strace -s 800 -ff -e write ./myprogram