/proc/(process id)/fd 에서

hongwoo의 이미지

/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 를 리다이렉션해봤는데 안되네요..

혹시 이런 방법 사용해보신분 도와주세요..
이와 관련된 어떠한 아이디어나 참고자료도 알려주시면 고맙겠습니다. ~

ssehoony의 이미지

제 생각엔 디버깅 로그 기록을 stdout 으로 하고 필요할때만 현재 상황을 보고 싶으신 듯 하네요.
screen 이란 툴을 이용해서 그렇게 할 수 있습니다.

하지만 디버깅을 하기 위해서 필요한 로그는 문제를 발견했 당시의 프로그램이 어떻게 행동하고 있는지도 중요하지만 그것 보다 더 중요한 것은 이렇게 의도하지 않은 상태로 프로그램을 흘러가도록하게 한 원인이 더 중요합니다. stdout 으로 디버깅 정보를 표시한다면 이미 원인을 됐을 법한 것에 대한 로그는 이미 지나가 버린 상태이므로 디버깅용 로그로서의 의미가 사라지게 됩니다.
제가 생각하는 좋은 방법은 파일로 기록하는 것인데 너무 많은 양이 기록되는게 문제라면 logrotate 를 이용해서 주기적으로 로그 파일을 rotate 하므로서 해결하시는 쪽을 권장합니다. 릴리즈 버전을 만들기 전에 장시간 검증을 통해 안정적으로 작동한다고 확신이 서는 부분의 로그를 간략하게 변경하므로서 로그양을 줄이는 방법도 있고, ifdef와 디버깅용 로깅 매크로를 이용해 릴리즈 버전에서는 디버깅 로그를 제거하는 방법도 좋습니다.

익명 사용자의 이미지

nohup 은 어떠실지..

nohup './a.out'

이런식으로 하시면, nohup.out 파일에 stdout 이 쌓입니다.

nohup './a.out' > debug.log

으로 직접 어느파일에 기록할지도 지정할 수 있습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.