sudo bpftrace --include /usr/src/linux/include/linux/sched.h --include /usr/src/linux/include/linux/sched/signal.h --include /usr/src/linux/include/linux/tty.h -e 'BEGIN{@tty[curtask->signal->tty->name] = 1; @tty[""] = 1} u:libc.so.6:write /!@tty[curtask->signal->tty->name]/ {printf("%s[%d] %s
", comm, pid, str(arg1))}' -f json | jq --unbuffered 'select(.type=="printf").data' | sed -r 's/^"(.*) (.*)"$/: /'
- 자신의 커널이 BTF를 지원한다면 주황색은 생략가능 (현재 프로세스의 tty가져올때 쓰는중)
- 초록색은 io loop 방지용으로 넣었는데 개선이 필요함 (get_current_tty대신 구조체에서 바로 가져오는중)
- 파란색은 정제용 (안넣으면 escape sequence들이 확장되서 보기 어려워짐)
write를 그대로 쓰니 결과가 너무 더러워지는거 같아서
다음 주말엔 tty_write kernel function을 tracing해보고 싶은데인자 struct iov_iter를 아직 어떻게 파싱할 수 있을지 모르겠음
왜 코드 색깔이 안 맞나 했더니 다크모드에선 주황이 파랑으로, 초록이 보라로, 파랑이 빨강으로 변하네. 잘 쓸게 고마워
내가 wsl을 쓰고 있어서 그런지 기존의 커널에는 linux/sched/signal.h 가 없네. 수동으로 업데이트 해야 할 듯