쉘에서 프로세스 실행과 동시에 멈추는 방법?

mnm96의 이미지

a라는 프로그램을 ./a 와 같이 실행을 시키는데
실행과 동시에 멈추게 할 수 없나요?
C 프로그램으로 보면 Main함수 들어가자 마자 멈추게 하고 싶어요.
코드에서 gets()를 호출하는 방식이 아니라 쉘에서 컨트롤 할 수
없을까요?

jellypo의 이미지

gdb 같은 디버거를 쓰면 되지 않나요? 디버거를 쓸 수 없는 환경인가요?

mnm96의 이미지

최종 목표가 gdb로 attach를 시키는 겁니다.
그런데 attach는 이미 실행 중인 프로세스에 대해서 되는 거라
attach 할려고 보면 어느 정도 실행이 되어서 어떤 부분은 그냥
지나가더라고요..

fm100의 이미지

gdb로 바로 실행하면 안되는건가요?

$ gdb ./a
=================================================
Do the python !
=================================================

=================================================
Do the python !
=================================================

cinsk의 이미지

x86이라면:

#include <stdio.h>
#include <signal.h>
 
#define BREAK   __asm__("int3\n")
 
void trap_handler(int sig) {}
 
int
main(void)
{
  signal(SIGTRAP, trap_handler);
  printf("hello\n");
  BREAK;
  printf("world\n");
  return 0;
}

GDB로 실행하면:

$ gcc -g tmp.c
$ gdb -q ./a.out
(gdb) r
Starting program: /home/cinsk/src/a.out 
hello
 
Program received signal SIGTRAP, Trace/breakpoint trap.
main () at tmp.c:10
10	  printf("world\n");
(gdb) _

portable하게 만들려면, 위 방법 대신, 적절한 위치에 pause()를 삽입하고, shell에서 해당 프로세스에게 SIGUSR1 등을 날리는 방법을 고려하는 것이 좋습니다.

--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/

mnm96의 이미지

소스에는 아무것도 삽입하지 않고 쉘을 통해서만 pause 시킬순 없나요?

Momentics라는 Eclipse 기반 프로그램을 사용하는데

그 프로그램에서는 Remote 타켓의 프로그램을 디버깅을 하게 되면 시작과 동시에 멈춥니다.

아무리 봐도 Attach하는 방식인데 시작과 동시에 어떻게 멈추게 하는지..

debugging library를 사용해서 시작 시점에 멈추는 걸까요?

lovian의 이미지

혹시 그거 자바 프로그램 아닌가요?

Java 에서 지원하는 디버깅 인터페이스를 이용해서 그런게 아닐까 추측을.. ^_^.
-----------------
한글을 사랑합니다.

-----------------
한글을 사랑합니다.

cinsk의 이미지

eclipse는 안써봐서 모르겠지만, 질문하신 내용을 보니, gdbserver/gdb를 쓰는 것 같네요.

디버깅할 프로그램을 바로 시작하는 것이 아니라, gdbserver를 이용해서 시작하고,
gdb에서 target을 remote로 설정하는 방식이 아닐까 합니다.

자세한 것은 'info gdb remote'에 나옵니다. 이 때 COMM 파라메터로 대충 "localhost:50000" 정도를 쓰면 되겠네요.

--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/

mnm96의 이미지

gdb 메세지를 확인해보니까 이런게 있네요.
Stopped due to shared library event
프로세스가 가지는 라이브러리는 libc.so.c 이것뿐인데
라이브러리에서 이벤트가 발생한다고하니 libc에서 이벤트가 발생하는 것 같은데
make의 어떤 부분이 define으로 이벤트를 발생 시키는 걸까요?
아래의 Make 메세지를 보시면 디버그에 -DVARIANT_g 가 하나 더 있고 -g 옵션이 붙은 거 뿐인거 같은데
-DVARIANT_g 가 뭐죠? 이거 때문에 이벤트가 발생할까요?
아님 이 라이브러리가 다른 libc라이브러리와 다르게 만들어 졌을까요?
그것도 아니라면 제가 모르는 라이브러리가 링크 되는 걸까요?

이게 실행 파일 make 메세지고
C:/QNX/QNX632/host/win32/x86/usr/bin/qcc -Vgcc_ntosh -c -O -Wc,-Wall -Wc,-Wno-parentheses -DNDEBUG -I. -ID:/mydoc/Momentics/TestCallStackSize/sh/o-le -ID:/mydoc/Momentics/TestCallStackSize/sh -ID:/mydoc/Momentics/TestCallStackSize -IC:/QNX/QNX632/target/qnx6/usr/include -EL -DVARIANT_le D:/mydoc/Momentics/TestCallStackSize/TestCallStackSize.c
C:/QNX/QNX632/host/win32/x86/usr/bin/rm -f D:/mydoc/Momentics/TestCallStackSize/sh/o-le/TestCallStackSize
C:/QNX/QNX632/host/win32/x86/usr/bin/qcc -Vgcc_ntosh -Wl,--no-keep-memory -oD:/mydoc/Momentics/TestCallStackSize/sh/o-le/TestCallStackSize TestCallStackSize.o -L. -LC:/QNX/QNX632/target/qnx6/shle/lib -LC:/QNX/QNX632/target/qnx6/shle/usr/lib -EL

이건 디버그 make 메세지입니다.
C:/QNX/QNX632/host/win32/x86/usr/bin/qcc -Vgcc_ntosh -c -Wc,-Wall -Wc,-Wno-parentheses -I. -ID:/mydoc/Momentics/TestCallStackSize/sh/le -ID:/mydoc/Momentics/TestCallStackSize/sh/o-le-g -ID:/mydoc/Momentics/TestCallStackSize/sh -ID:/mydoc/Momentics/TestCallStackSize -IC:/QNX/QNX632/target/qnx6/usr/include -EL -g -DVARIANT_le -DVARIANT_g D:/mydoc/Momentics/TestCallStackSize/TestCallStackSize.c
C:/QNX/QNX632/host/win32/x86/usr/bin/rm -f D:/mydoc/Momentics/TestCallStackSize/sh/o-le-g/TestCallStackSize_g
C:/QNX/QNX632/host/win32/x86/usr/bin/qcc -Vgcc_ntosh -Wl,--no-keep-memory -oD:/mydoc/Momentics/TestCallStackSize/sh/o-le-g/TestCallStackSize_g TestCallStackSize.o -L. -LC:/QNX/QNX632/target/qnx6/shle/lib -LC:/QNX/QNX632/target/qnx6/shle/usr/lib -EL -g

댓글 달기

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