다른 프로세스로 신호를 어떻게 보낼 수 있을까요?

bergamot의 이미지

제가 임베디드 시스템으로 프로그램을 하나 짜고 있는데요

중간에 system 명령으로 보조 프로그램을 실행합니다

문제는 주 프로그램이 계속 도는 동안에 실행된 보조 프로그램이 끝날 경우

실행이 끝났다는 사실을 주 프로그램이 인식해야 하거든요?

이걸 해결할 방법이 어떤게 있을까요?

간단하게 방향이라도 잡아주신다면 열심히 찾아서 해보겠습니다 ^^

초보다 보니 어떤게 있는지 몰라서 일단 방향 잡기도 쉽지 않군요

감사드립니다~

douner의 이미지

잘 기억은 나지 않지만 예전에 이와 비슷한 주제를 읽은 적이 있는 것 같네요..
여러가지 방법 중에서 가물가물 기억 나는 것은 파일을 이용하는 것입니다.
보조프로그램이 실행되면 파일을 만듭니다. 그리고 주프로그램에서는 파일의 존재 여부를 주기적으로 검사합니다. 그리고 보조프로그램은 자신이 만들었던 파일을 지우고 종료합니다.
이렇게 하면 주프로그램이 보조프로그램의 실행.종료 여부를 알 수 있지 않을까요... 확실한 답변을 못 드려서 죄송합니다 ^^;;

인생, 쉬운 것만은 아니네..

terminus의 이미지

bergamot wrote:
제가 임베디드 시스템으로 프로그램을 하나 짜고 있는데요

중간에 system 명령으로 보조 프로그램을 실행합니다

문제는 주 프로그램이 계속 도는 동안에 실행된 보조 프로그램이 끝날 경우

실행이 끝났다는 사실을 주 프로그램이 인식해야 하거든요?

이걸 해결할 방법이 어떤게 있을까요?

간단하게 방향이라도 잡아주신다면 열심히 찾아서 해보겠습니다 ^^

초보다 보니 어떤게 있는지 몰라서 일단 방향 잡기도 쉽지 않군요

감사드립니다~

man popen ;)

껍질의 파괴

FruitsCandy의 이미지

보조프로그램이 종료되었음을 즉각 알기 위해서는 PIPE나 FIFO를 이용하시고

주기적으로 체크하시려면 시스템콜 ps를 실행시키시면 됩니다.

PIPE나 FIFO는 바로 통신이 가능하므로 보조프로그램에서 주프로그램으로

종료가 됨을 바로 알려주고 종료하시면 되고

주기적으로 체크하실 경우는.

system("ps -ef | grep 보조실행파일이름 > .temp_log");

하셔서 .temp_log 파일사이즈가 0이면 보조프로그램이 종료된 것이고

파일사이즈가 0보다 크다면 실행중인 것으로 간주하시면 됩니다.

아지랑이류 초환상 공콤 화랑... 포기하다.. T.T

cdpark의 이미지

SIGCHLD 핸들러를 만드는게 답이겠죠?

pynoos의 이미지

bergamot wrote:
제가 임베디드 시스템으로 프로그램을 하나 짜고 있는데요

중간에 system 명령으로 보조 프로그램을 실행합니다

문제는 주 프로그램이 계속 도는 동안에 실행된 보조 프로그램이 끝날 경우

실행이 끝났다는 사실을 주 프로그램이 인식해야 하거든요?

이걸 해결할 방법이 어떤게 있을까요?

간단하게 방향이라도 잡아주신다면 열심히 찾아서 해보겠습니다 ^^

초보다 보니 어떤게 있는지 몰라서 일단 방향 잡기도 쉽지 않군요

감사드립니다~

system 으로 명령을 내릴 때, "&"를 맨 뒤에 넣어 background job으로 했나보죠? 주프로그램과 보조 프로그램이 동시에 실행되는 것을 보니..

이런 경우에는 자동으로 발생하는 signal을 통해서는 알 수 없습니다.
다른 보조 메커니즘을 사용해야합니다. 파일을 만든다든지 아니면 인위적으로 parent의 pid를 argument 등으로 넘기고 signal을 던진다든지..

고민해보셔요.

valor의 이미지

system 명령을 쓰는 걸보면 system으로 실행이 되는 어플리케이션이 다른 어플리케이션이라 그쪽에서 뭘보낸다거나 하는 일은 안될꺼라는 생각이 드네요...

waitpid라는 함수의 man page를 보시면 wait할 pid를 지정해서 해당 pid의 태스크가 종료하면 리턴이 됩니다.

기다리는걸 안하려면 time out 값을 NO_WAIT인가 하는 것으로 넣어주어 에러인지 (이미 종료) Timeout인지 (동작중) 파악할 수 있을 것 같습니다.

async하게 하기 위해서는 SIGCHILD가 관계가 있을 것 같은데 자세히는 모르겠네요. child가 종료하면 parent로 이 시그널을 보낸다고 알고 있는데...

valor의 이미지

&를 넣어서 백 그라운드로 실행을 하더라도, 통상의 데몬들처럼 setsid 같은 것으로 새로 세션을 만들지 않으면 system을 실행시킨 task의 child가 되는게 아닌가요? child가 종료하면 항상 SIGCHLD를 parent에게 보내구요. 그 signal을 무시하고 말고는 parent에서 정하는 것이구요.

pynoos의 이미지

valor wrote:
&를 넣어서 백 그라운드로 실행을 하더라도, 통상의 데몬들처럼 setsid 같은 것으로 새로 세션을 만들지 않으면 system을 실행시킨 task의 child가 되는게 아닌가요? child가 종료하면 항상 SIGCHLD를 parent에게 보내구요. 그 signal을 무시하고 말고는 parent에서 정하는 것이구요.

다릅니다.. system 은 기본적으로 shell을 구동시킨다음 그 shell에서 명령을 parsing하고 다시 실행하기 때문에, system을 실행 한 쪽에서는 shell에 대한 것만 부모 자식관계로 파악합니다.

개다가 & 로 실행시킨다면, 아마 실험은 안해봤는데, orphan process로 될 것 같은데요..?

Necromancer의 이미지

system()대신에 exec()류의 함수를 써야겠네요.

execl(), execv(), .... 대신 인수는 수동으로 집어 넣어야 합니다. 아 참 fork()도 추가

Written By the Black Knight of Destruction

쎄피로의 이미지

exec류를 쓰시고, signal 처리로 하시면 될것 같습니다..

세상은 넓고, 할 일은 많은데, 난 숨만 쉬고 있니?

ssehoony의 이미지

socket 통신을 하는 것도 괜찮을 것 같네요
tcp/ip 소켓도 좋겠지만 같은 로컬 서버에서 돌아가는게 불변이라면 좀 더 빠른 unix socket 도 좋을 듯 하네요.

다른 방법으로 공유메모리를 이용한 메시지큐 같은걸 구현해도 좋을 것 같네요.

bergamot의 이미지

여러가지 답변들 감사드립니다

참조해서 공부해 보겠습니다

^^

댓글 달기

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