우분투 환경에서 C언어 시그널 질문 있습니다.

mjso9805의 이미지

이제 막 시그널 공부 중인 학생입니다.

시그널 SIGUSR1을 받으면
그 부모 프로그램에서 만든 현재 진행 중인 자식 프로세서에게 SIGSUSR1을 보낸 후,
다음 시그널까지 대기 상태로 만드려고 합니다.

signal(SIGUSR1,handler) 으로 넘기고,

void handler(signo) 함수 안에는

if(signo==SIGUSR1)
kill(0,SIGUSR1);

을 넣었습니다.
위 명령을 사용했더니 자식 프로세서 말고 자기 자신에게도 SIGUSR1을 보내서 무한 루프가 발생해버리는데,
다른 방법이 없을까요? 혼자서 여러가지 시도해봤지만 계속 실패 중이라 도움이 필요합니다 ㅠ

익명 사용자의 이미지

kill 함수에서 pid 값을 0 으로 설정하면 같은 프로세스 그룹에 속한 모든 프로세스에게
신호가 전달되요. 부모와 자식 프로세스는 같은 프로세스 그룹에 속하므로 부모 프로세스에게도
전달되는거죠. kill( 자식 pid, SIGUSR1 ) 로 해보세요

mjso9805의 이미지

그럼 자기 자신을 제외하고 보내려면 한 번에 자식 프로세서 1개에만 보낼 수 있는 건가요?
자식 프로세서가 여러 개면 하나하나 따로 보내는 방법밖에 없나요?

익명 사용자의 이미지

sginal mask 기능을 이용하면 원하는 신호를 ignore 할수있어요.
부모 프로세스에서 kill 신호를 보내기 전에 아래와 같이 설정하면
부모 프로세스에는 SIGUSR1 신호가 전달되지 않아요.
man page 를 잘 보아야 합니다. ( man kill, man sigprocmask )

     sigset_t    mask;
     sigaddset(&mask, SIGUSR1);
     sigprocmask(SIG_SETMASK, &mask, NULL);
AustinKim의 이미지

다음 시그널까지 대기 상태로 만드려면 pause() 함수를 호출하는게 좋지 않을까요?

그리고, kill 명령어로 pid 값에 따른 동작을 정리하면 다음과 같으니 참고하시면 좋을 것 같습니다.

kill -9 [pid]: pid에 해당하는 프로세스를 종료
kill -9 -2: PID가 2인 프로세스가 속한 프로세스 그룹 내 모든 프로세스를 종료
kill -9 -1: 해당 프로세스 외의 모든 프로세스에 대해 종료 요청

혹시 시그널을 전달할 때 커널 내부의 동작을 파악하시려면 아래 소스를 분석하시면 됩니다.
https://elixir.bootlin.com/linux/v4.19.30/source/kernel/signal.c
static int kill_something_info(int sig, struct siginfo *info, pid_t pid)

(개인블로그)
http://rousalome.egloos.com

mjso9805의 이미지

pause() 추가하니 바로 성공했습니다 감사합니당

댓글 달기

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 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.