/proc/(process id)/fd 에서
/proc/(process id)/fd ..
예를 들어 /proc/63/fd/dev/ 에 보면..
lrwx------ 1 root root 64 Jul 30 12:28 0 -> /dev/tty2
lrwx------ 1 root root 64 Jul 30 12:28 1 -> /dev/tty2
lrwx------ 1 root root 64 Jul 30 12:28 10 -> /dev/lt120s_04
lr-x------ 1 root root 64 Jul 30 12:28 11 -> pipe:[56]
l-wx------ 1 root root 64 Jul 30 12:28 12 -> pipe:[56]
lrwx------ 1 root root 64 Jul 30 12:28 13 -> /tmp/LOG_SYS
lrwx------ 1 root root 64 Jul 30 12:28 14 -> /dev/ttyS1
l-wx------ 1 root root 64 Jul 30 12:28 15 -> /tmp/FIFO.network
lrwx------ 1 root root 64 Jul 30 12:28 16 -> /tmp/FIFO.network
lrwx------ 1 root root 64 Jul 30 12:28 17 -> socket:[59]
..... (skip) .....
에 보면 이렇게 있는데요.. 제가 원하는건 어떤 프로세스의 stdout 을 가로채는것입니다. 뭐 크래킹 시도는 아니구요. 특수한 상황에서의 디버그 방법을 찾다가.. 이런 생각을 하게 됐습니다.
단순하게 /dev/tty2 를 리다이렉션해봤는데 안되네요..
혹시 이런 방법 사용해보신분 도와주세요..
이와 관련된 어떠한 아이디어나 참고자료도 알려주시면 고맙겠습니다. ~
제 생각엔 디버깅 로그 기록을 stdout 으로 하고 필요할때만 현재 상
제 생각엔 디버깅 로그 기록을 stdout 으로 하고 필요할때만 현재 상황을 보고 싶으신 듯 하네요.
screen 이란 툴을 이용해서 그렇게 할 수 있습니다.
하지만 디버깅을 하기 위해서 필요한 로그는 문제를 발견했 당시의 프로그램이 어떻게 행동하고 있는지도 중요하지만 그것 보다 더 중요한 것은 이렇게 의도하지 않은 상태로 프로그램을 흘러가도록하게 한 원인이 더 중요합니다. stdout 으로 디버깅 정보를 표시한다면 이미 원인을 됐을 법한 것에 대한 로그는 이미 지나가 버린 상태이므로 디버깅용 로그로서의 의미가 사라지게 됩니다.
제가 생각하는 좋은 방법은 파일로 기록하는 것인데 너무 많은 양이 기록되는게 문제라면 logrotate 를 이용해서 주기적으로 로그 파일을 rotate 하므로서 해결하시는 쪽을 권장합니다. 릴리즈 버전을 만들기 전에 장시간 검증을 통해 안정적으로 작동한다고 확신이 서는 부분의 로그를 간략하게 변경하므로서 로그양을 줄이는 방법도 있고, ifdef와 디버깅용 로깅 매크로를 이용해 릴리즈 버전에서는 디버깅 로그를 제거하는 방법도 좋습니다.
nohup 은 어떠실지..[code:1]nohup './a.out
nohup 은 어떠실지..
nohup './a.out'
이런식으로 하시면, nohup.out 파일에 stdout 이 쌓입니다.
nohup './a.out' > debug.log
으로 직접 어느파일에 기록할지도 지정할 수 있습니다.
댓글 달기