검색결과 리스트
Linux/System Programing에 해당되는 글 1건
- 2009.07.30 Fedora10에서 SIGNAL 관련 처리.
글
Fedora10에서 SIGNAL 관련 처리.
Linux/System Programing
2009. 7. 30. 11:37
1. 다른 프로세스에게 시그널 보내기 : kill();
2. 시그널 수신시 Event 실행하기 : signal();
#include <unistd.h>
pause();
3. 예제 소스입니다.
<주의>
만약 스레드를 만들고 스레드와 스레드 그릅프로세스가 모두 같은 signal을 함수로 등록할 경우. 부모의 수행 함수만 실행되고 스레드의 수행 함수는 실행되지 않는다.
#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
Compile 명령어 :
gcc -o test test.c -lpthread
<주의>
만약 스레드를 만들고 스레드와 스레드 그릅프로세스가 모두 같은 signal을 함수로 등록할 경우. 부모의 수행 함수만 실행되고 스레드의 수행 함수는 실행되지 않는다.