프로세스가 현재 무엇을 하고 있는지 명령어를 이용해 알 수 있

msoyu의 이미지

안녕하세요?

여러 개의 쓰레드를 사용하는 프로세스가 어느 순간에 동작이 멈추는 것 같습니다. 많은 출력문을 주기적으로 출력 하도록 해 놓았는데 메시지가 하나도 출력되지 않는 것으로 보아 멈춰 있는 듯 합니다. top 을 이용해 살펴보면 sleep으로 표시되고, CPU를 사용하지 않고 있습니다.

디버깅을 해 보려 하지만 쉽지가 않네요.
그래서, 혹시 명령어를 이용하여 프로세스 또는, 각 쓰레드들이 어떤 함수를 수행중인지 알 수 있을까 해서요.

참고로, main 을 포함하여 총 4개의 쓰레드로 구성되어 있습니다.
예를 들어, A, B, C, D 쓰레드가 있으며,
A 쓰레드는, 매 초 sleep 이후에 B, C, D 쓰레드 상태를 감시하고, 만일 종료된 경우 재 수행해 주는 작업을 합니다.
B 쓰레드는, 시스템에서 제공하는 Timer (timer_create) 를 이용하여 주기적인 작업을 수행합니다.
C 쓰레드는 메시지 큐로부터 데이터를 읽어 UDP 를 이용하여 외부 호스트로 전달하고,
D 쓰레드는 외부로부터의 UDP를 수신하여 처리합니다.

시험 환경은, Linux, Tru64 입니다.

도움 부탁 드립니다.
감사합니다.

fromdj의 이미지

제 경험상 간단하게 각 쓰레드가 주기적으로 어떤 구문에서 printf 를 해줘서
그것을 잡아내서 분석해 보면 어떤 쓰레드가 죽는지 알수 있겠죠.

^^ be cool ~
http://fromdj.pe.kr

yui의 이미지

gdb 를 프로세스에 attach 하고, 과감히 ctrl+c 하고 bt 를 수행! ;;
strace 도 한번 시도해 보세요. 계속 멈춰있다면 아무 메시지도 안 내겠지만요.

하지만 역시...
죽여도 되는 프로세스면, zoocmic 님 말씀대로 디버깅 메시지를 더 자세히 넣고 다시 수행에 한표를 던집니다.

msoyu의 이미지

의견 감사 드립니다.
쓰레드들이 죽는 것 같지는 않네요.
그러다 보니 디버깅이 더 어려운 것 같습니다.

더 살펴 보아야겠지만,
동일한 환경하에서 시스템 타이머를 하나 사용하는 것과 두 개를 사용하는 것의 차이로 보여지네요.
하나만을 사용했을 때는 멈춤 현상을 보지 못한 것 같은데,
두 개를 사용하게 되면 빠르면 몇 십분, 늦으면 몇 시간 후에 그런 현상이 발생하고 있습니다.

첫번째 타이머는 매 초 주기로 시그널을 받고,
두번째 타이머는 첫번째 타이머에 의해 시그널을 받아 처리할 때 reset을 하는 구조를 하고 있습니다.

좋은 하루 되세요. :)

좋은 하루 되세요.

익명 사용자의 이미지

thread-unsafe 한 함수를 사용한 게 아닌가 확인해보세요.

버그소년의 이미지

lsstack을 한번 사용해보심이 좋을듯합니다.

구동중인 프로세스의 스택을 볼 수 있습니다.

가끔은 밥을 굶어도 살 수 있다.

msoyu의 이미지

버그소년 wrote:
lsstack을 한번 사용해보심이 좋을듯합니다.

구동중인 프로세스의 스택을 볼 수 있습니다.

버그소년님이 추천하신 lsstack을 이용하여 프로세스의 스택을 확인함으로써 문제의 원인을 찾을 수 있게 되었습니다. 현재까지 잘 동작하고 있습니다. 고맙습니다.

*문제 - 여러 쓰레드간에 mutex 록이 deadlock 상태로 된 것입니다.
*원인 - Timer 시그널 핸들러에 대한 block 을 설정하지 않음으로 인해 다른 쓰레드들에서 해당 시그널을 공유.처리함에 따라 문제 발생한 것으로 보입니다.
*조치 - 다른 쓰레드들에서는 Timer 시그널을 받지 않도록 block
- Timer 시그널 핸들러 처리 중 시그널 받지 않도록 block

lsstack 참조 : http://sourceforge.net/projects/lsstack
쓰레드와 시그널 참조 : http://www.joinc.co.kr/modules.php?name=News&file=article&sid=142&mode=nested

감사합니다. :o

좋은 하루 되세요.

kicom95의 이미지

심심하면 항상 게시판 읽는데 오늘 좋은 글 만났네요

lstack

감사합니다 ^^

가자 해외로 ~ .. 돈 벌러.

익명 사용자의 이미지

kicom95 wrote:
심심하면 항상 게시판 읽는데 오늘 좋은 글 만났네요

lstack

감사합니다 ^^

asdfasdf

jjocbak의 이미지

Anonymous wrote:
thread-unsafe 한 함수를 사용한 게 아닌가 확인해보세요.

jjjjjkkkkk

kicom95의 이미지

gcc -g -o lsstack -Wall -lbfd -liberty lsstack.c
/tmp/ccdLvCFs.o(.text+0x141b): In function `get_file_symbols':
/home/speedy/lstack/lsstack.c:685: undefined reference to `bfd_openr'
/tmp/ccdLvCFs.o(.text+0x1432):/home/speedy/lstack/lsstack.c:687: undefined reference to `bfd_get_error'
/tmp/ccdLvCFs.o(.text+0x143b):/home/speedy/lstack/lsstack.c:687: undefined reference to `bfd_errmsg'
/tmp/ccdLvCFs.o(.text+0x148c):/home/speedy/lstack/lsstack.c:693: undefined reference to `bfd_check_format'
/tmp/ccdLvCFs.o(.text+0x1618):/home/speedy/lstack/lsstack.c:732: undefined reference to `bfd_close'
/tmp/ccdLvCFs.o(.text+0x1982): In function `grok_symbols':
/home/speedy/lstack/lsstack.c:843: undefined reference to `bfd_init'
collect2: ld returned 1 exit status

그런데 이런 에러를 만났는데요....

라이브러리도 제대로 링크 해준거 같은데....

구글신도 오늘은 제대로 답을 안해주네요 -_-;;

리눅스 버젼 문제인듯 T.T

가자 해외로 ~ .. 돈 벌러.

jongi의 이미지

kicom95 wrote:
gcc -g -o lsstack -Wall -lbfd -liberty
lsstack.c

bfd 가 붙는 것으로 보아 -lbfd 에 있는 함수들 같은데요.
그 플래그를 뒤로 빼줘 보세요.

--
종이한장 * 이성으로 비관하더라도 의지로 낙관하라! (그람시)

msoyu의 이미지

kicom95 wrote:

리눅스 버젼 문제인듯 T.T

:o 다음에서는 컴파일 됩니다.

[ysw@pmas2 lsstack]$ uname -a
Linux pmas2 2.4.18-4smp #1 SMP Thu Aug 22 17:42:36 KST 2002 i686 unknown
[ysw@pmas2 lsstack]$ gcc --version
2.95.4
[ysw@pmas2 lsstack]$

:? 다음에서는 동일한 컴파일 오류가 발생하네요.

[ysw@ns lsstack]$ uname -a
Linux ns.bnftech.com 2.4.20-8smp #1 SMP Thu Mar 13 17:45:54 EST 2003 i686 i686 i386 GNU/Linux
[ysw@ns lsstack]$ gcc --version
gcc (GCC) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)
Copyright (C) 2002 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[ysw@ns lsstack]$

:?: 그리고, 라이브러리 순서를 바꿔도 동일한 오류가 발생합니다.

좋은 하루 되세요.

jongi의 이미지

msoyu wrote:

:?: 그리고, 라이브러리 순서를 바꿔도 동일한 오류가 발생합니다.

제가 사용하는 시스템은 Fedora Core3 구요, GCC 버전은 아래와 같습니다.

@red ~/Download/lsstack]$ gcc --version
gcc (GCC) 3.4.3 20050227 (Red Hat 3.4.3-22.fc3)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

컴파일 해보니, false 에서 문제가 생겼는데 FALSE 로 고친 다음 다시하니, 아래처럼 에러가 나오네요.

@red ~/Download/lsstack]$ make
gcc -g -o lsstack -Wall -lbfd -liberty lsstack.c
/tmp/ccUX8h3J.o(.text+0x1406): In function `get_file_symbols':
/home/jongi/Download/lsstack/lsstack.c:683: undefined reference to `bfd_openr'
/tmp/ccUX8h3J.o(.text+0x141d):/home/jongi/Download/lsstack/lsstack.c:685: undefined reference to `bfd_get_error'
/tmp/ccUX8h3J.o(.text+0x1426):/home/jongi/Download/lsstack/lsstack.c:685: undefined reference to `bfd_errmsg'
/tmp/ccUX8h3J.o(.text+0x1477):/home/jongi/Download/lsstack/lsstack.c:691: undefined reference to `bfd_check_format'
/tmp/ccUX8h3J.o(.text+0x1601):/home/jongi/Download/lsstack/lsstack.c:730: undefined reference to `bfd_close'
/tmp/ccUX8h3J.o(.text+0x196a): In function `grok_symbols':
/home/jongi/Download/lsstack/lsstack.c:841: undefined reference to `bfd_init'
collect2: ld returned 1 exit status
make: *** [lsstack] 오류 1

그래서 Makefile 에서 라이브러리 링크 위치를 바꿔 주었더니 잘 됩니다.

@red ~/Download/lsstack]$ make
gcc -g -o lsstack lsstack.c -Wall -lbfd -liberty
@red ~/Download/lsstack]$

nm 으로 확인해보면 undefine 된 함수들이 libbfd.h 에 있는게 맞는데...
조금이나마 도움이 되시길 바랍니다.

--
종이한장 * 이성으로 비관하더라도 의지로 낙관하라! (그람시)

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.