Sysdig는 쓰기 시스템 호출의 종료 이벤트를 표시하지 않습니다.

Sysdig는 쓰기 시스템 호출의 종료 이벤트를 표시하지 않습니다.

stdout(또는 stderr)에 대한 쓰기를 캡처하려고 하는데 실제 데이터가 종료 이벤트와 관련이 있는 것 같습니다. 나는 stdout과 stderr에 쓰는 간단한 C 프로그램을 작성했습니다.

#include <stdio.h>
int
main()
{
    printf("Standard output\n");
    fprintf(stderr, "Standard error\n");
    return 0;
}

"gcc example.c -o example"로 컴파일했습니다. 지금 sysdig를 시작하면

sudo sysdig --unbuffered -X syscall.type=write and proc.name=example

./example을 실행하면 다음과 같은 출력이 표시됩니다.

91612 20:12:09.273696708 2 example (12909) > write fd=1(<f>/dev/pts/1) size=16 
91613 20:12:09.273726879 2 example (12909) > write fd=2(<f>/dev/pts/1) size=15 

데이터가 표시되지 않고 입력 이벤트(>)만 표시됩니다. 또한 stdout chisel은 출력을 생성하지 않습니다.

sudo sysdig --unbuffered -X -c stdout syscall.type=write and proc.name=example

문제가 내 샘플 프로그램에 있습니까, 아니면 다른 곳에 있습니까? 인수 없이 sysdig를 실행하면 때로는 특정 프로세스에 대한 종료 이벤트도 표시됩니다.

저는 Ubuntu 20.04 배포판을 실행하고 있으며 sysdig 버전은 0.26.4입니다. sysdig에 대한 자세한 내용은 다음을 참조하세요.sysdig GitHub 저장소.

답변1

분명히 Ubuntu와 함께 제공되는 버전에는 몇 가지 문제가 있습니다. sysdig 웹사이트에서 최신 버전(0.27.1)을 다운로드했는데 이제 결과가 정확합니다.

65099 19:55:54.695520567 7 example (10805) > write fd=1(<f>/dev/pts/0) size=16 
65102 19:55:54.695526434 7 example (10805) < write res=16 data=
    0x0000: 5374 616e 6461 7264 206f 7574 7075 740a  Standard output.
 
65103 19:55:54.695528110 7 example (10805) > write fd=2(<f>/dev/pts/0) size=15 
65104 19:55:54.695529507 7 example (10805) < write res=15 data=
    0x0000: 5374 616e 6461 7264 2065 7272 6f72 0a  Standard error.

관련 정보