child로 오는 시그널 처리하기..

felucca의 이미지

1. fork하여 생긴 child의 경우에
parent에서 signal()로 정의한 시그널 핸들러도 상속하나요?

2. 상속한다면,
fork하여 생긴 child에서 execev를 이용하여 다른 프로그램을
띄운 후에도 그 시그널 핸들러는 유효한가요?

3. 유효하지 않다면,
그 새 프로그램을 돌리는 프로세스에 시그널이 갔을 때, 기존 부모
process에 대해서 어떤 처리를 해 주려면 어떻게 해야 할까요?

간단한 쉘을 짜고 있는데요,
위처럼 child process를 fork하여 프로그램을 돌리는 경우에
ctrl-z나 ctrl-c 같은 경우는 shell자체에 시그널이 와서 handler를
써서 child에 적당한 시그널을 주고 하는 식으로 구현했는데
다짜고짜 kill()을 써서 fork해 돌아가고 있는 child process에 직접
시그널을 줘 버리면.. 이걸 어떻게 처리해야 하는지..
쉘은 foreground로 위 프로그램을 돌리느라 기다리고만 있는데요..

너무 naive하게 구현한 것 같기도 하고.. ㅡㅡ;

/*shell에서 foreground로 돌렸을 때 child가 죽을때까지 기다리는 part.*/

void waitfg(pid_t pid)
{
	struct job_t *fg; // 따로 job list(jobs)를 관리하고 있음

	fg = getjobpid(jobs, pid);

/*job이 실행을 마쳐 없어지거나 (fg ==NULL) joblist에서 state가
ST(stop)으로 바뀌면 무한루프를 빠져나가 다시 prompt를 보임*/
  
	while(fg != NULL && fg->state != ST) 
	{
		sleep(1);
		fg = getjobpid(jobs, pid);
                 }
}
pynoos의 이미지

signal handler는 user memory에 있기 때문에 fork할때 그대로 복사됩니다. 따라서, signal handler는 유지 됩니다.
그러나 exec 계열을 사용하면 user memory가 모두 새로운 process를 위해 초기화 되기 때문에, signal handler는 유효하지 않게 됩니다.

3 번의 경우 답이 없습니다. child가 어떤 signal 을 받았을 경우 child의 상태가 변하는 즉, 죽는다든지, STOP된다든지 CONTINUE한다든지의 변화 외에는 알 방법이 없습니다. 위의 변화는 모두 SIGCHLD로 넘어오게 됩니다.

댓글 달기

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