Fedora10에서 SIGNAL 관련 처리.

Linux/System Programing 2009. 7. 30. 11:37
1. 다른 프로세스에게 시그널 보내기 : kill();

#include <sys/types.h>

#include <signal.h>

 int kill (pid_t pid, int sig);

pid :

(1). 양수 : gettid()로 구해지는 상대방 프로세스그릅의 pid값이 필요하다.

(2). 0     : 자신이 속하는 프로세스 그룹 모두에게 보낸다.

(3). -1   : 1번 프로세스를 제외하고, 모든 프로세스에게 보낸다.

      (pid가 높은 프로세스 에서 부터 작은 프로세스 순으로)

(4). -1미만의 pid : pid의 절대값에 해당하는 pid를 가진 프로세스 그롭

      에게 보낸다.

sig : 해당 pid에게 보낼 시그널을 기록한다.

int raise(int sig);
자기자신에게 sig 시그널을 날린다.
unsigned int alarm(unsigned int seconds);
seconds후에 자기자신에게 SIGALRAM시그널을 날린다.

2. 시그널 수신시 Event 실행하기 : signal();

#include <signal.h>

void (  *signal(int sig, void (* function)(int sig))  )(int);
sig시그널을 수신하였을때, "*function"이란 함수를 실행한다.

#include <unistd.h>

pause();
새로운 시그널이 수신될때까지 자신을 Block시키고 기다린다.


3. 예제 소스입니다.
위 파일은 그냥 검파일 하면 된다.
Compile 명령어 :
gcc -o test test.c -lpthread

<주의>
만약 스레드를 만들고 스레드와 스레드 그릅프로세스가 모두 같은 signal을 함수로 등록할 경우.  부모의 수행 함수만 실행되고 스레드의 수행 함수는 실행되지 않는다.