search results for 'signal'

  1. 2006/10/24 Signal Handler Assignment

l        Application 2

app2 app1 app3으로부터 signal을 받으면, app1이 보내준 signal을 받게 된다. App1 signal을 보내기 위해선, app2 pid를 알고 있어야 하는데, 숙제의 구조상 알 방법이 없다. 따라서, app1 app2 pid를 알기 위해서는 app2 app1 child process로 만들면 된다.

fork()는 두 번의 return을 하게 되는데 child process에게는 0 return하고 parent process에게는 child process pid return 된다. 따라서, Parent process child process pid를 알 수 있다.

l        Kill & kill_proc_info

int kill(int sig, int pid);

int kill_proc_info(int sig, struct siginfo *info, pid_t pid)

signal을 보내기 위해서는 둘 중 하나의 함수를 사용해야 한다. 강의 시간에 배운 kill_proc_info는 내부적으로 send_sig_info를 호출하게 된다. kill_proc_info source code는 아래에 첨부한다. 하지만, 가운데 매개 변수인 struct siginfo *info는 굳이 필요 없기 때문에 kill()함수를 이용하여, code를 구성하였다.

l        kill_proc_info source code

kill_proc_info(int sig, struct siginfo *info, pid_t pid)

{

          int error;

          struct task_struct *p;

          read_lock(&tasklist_lock);

          p = find_task_by_pid(pid);

                    error = -ESRCH;

          if (p)

                    error = send_sig_info(sig, info, p);

          read_unlock(&tasklist_lock);

          return error;

}

l        signal handler mapping

SigAction signal(int iSig, SigAction pAction)

signal handler를 등록하기 위한 prototype이다.

앞의 매개변수는 signal의 번호이고, 뒤에는 handler 함수의 이름을 넣으면 된다. 이 프로그램에서는 SIGUSR1, SIGUSR2의 사용자 signal을 사용하였다. 해당 signal의 번호가 같게 설정되어 mapping이 되어야 올바르게 handler가 수행된다.

signal(SIGUSR1, sig_handler);

signal(SIGUSR2, sig_handler2);



=====================================================================================================

임베디드 응용 숙제 중 signal handler에 대한 내용입니다. ㅎ

어제 허접하게 나마 정민이와 완성을 했죠 ㅎㅎ

위의 내용은 제 보고서에 들어간 설명 전문이라는....

혹시나... 베끼신다면 고려를 +_=;;;

kill_proc_info를 사용하기 위해선 struct siginfo *info에 대한 것이 있어야 할 껍니다.

예를 들면
struct siginfo info;

info.si_signo = sig;
info.si_errno = 0;
info.si_code = SI_USER;
info.si_pid = current->pid;
info.si_uid = current->uid;

이런식으로 해야 하지 않을까 합니다용 ㅋㅋ
저야 kill함수를 사용했지만, kill_proc_info를 쓰시는 분은 참고를 +_+;

===================================================================================