Computers/Linux System Programming

ch10. signal

emzei 2013. 5. 20. 10:38


◆ Signal

#include<signal.h>

 void (*signal(int signo, void (*func) (int))) (int);

(ret)  success : 포인터

   failed : NULL

 

◆ 리눅스에서 signal 함수 정의

#include<signal.h>

 typedef vod (*__sighadler_t) (int);

__sighandler_t signal (int __sig, __sighandler_t handler);

(ret)  success : 포인터

   failed : NULL

 

 


 

 

[ Kill, raise ]  

◆ kill

#include<signal.h>

int kill(pid_t pid, int signo);

(ret)  success : 0

   failed : -1

 

◆ raise 

#include<signal.h>

 int raise(int signo);

(ret)  success : 0

   failed : -1

 

[alarm, pause]

 

◆  alarm

#include<unistd.h>

unsigned int alarm(unsigned int seconds);

(ret)  0 또는 이전에 설정된 타이머가 만료될때까지의 시간(초)

 

 

 ◆ pause

#include<unistd.h>

 int pause(void);

(ret) -1 (errno 가 EINTR 로 설정됨)

 

 


 

 

 

-------------------------------------------------------------------------------------------------------------------

 

 [sig ___ set]

 ◆ sigemptyset : sigset_t 전부 0 으로 설정

 #include<signal.h>

 int sigemptyset(sigset_t *set);

(ret)  success : 0

   failed : -1

 

 

 ◆ sigfillset : sigset_t 전부 1으로 설정

#include<signal.h>

 int sigfillset(sigset_t *set); 

(ret)  success : 0

   failed : -1

 

 

 ◆ sigaddset : signo 에 해당하는 값을 1으로 설정

#include<signal.h>

 int sigaddset(sigset_t *set, int signo);

(ret)  success : 0

   failed : -1

 

 

 ◆ sigdelset : signo 에 해당하는 값을 0으로 설정

#include<signal.h>

 int sigdelset(sigset_t *set, int signo);

(ret)  success : 0

   failed : -1

 

 

 ◆ sigismember :  signo가 시그널 집합에 포함되어있는지 확인 

#include<signal.h>

 int sigismember(const sigset_t *set, int signo);

(ret)  success : (true) 1, (false) 0

   failed : -1

 

 

 

 ◆ sigprocmask : 시그널마스크 조회, 수정

#include<signal.h>

 int sigprocmask(int how, const sigset_t *nset, sigset_t *restrict oset);

(ret)  success :  0

   failed : -1

 

(참고) how 인자 : SIG_BLOCK / SIG_UNBLOCK / SIG_SETMAST

 

 ◆ sigpending : 현재 pending중인 시그널 집합을 가져옴

#include<signal.h>

 int sigpending(sigset_t *set);

(ret)  success : 0

   failed : -1

 

 

 

 

 ◆ sigaction : 시그널의 처분 방식을 설정, 조회

 

#include<signal.h>

 int sigaction(int signo, const struct sigaction *restrict nact, struct sigaction *restrict oact);

(ret)  success : 0

   failed : -1

 

*** 

[일반적 사용순서]

struct sigaction act, oact;

...

act.sa_handler = (함수명);

sigemptyset(&act.sa_mask);

if(sigaction(signo, &act, &oact) < 0)

{

...

}


***

설정 --- act가 NOT NULL

조회 --- act가 NULL 

 

 

 ◆ sigsetjmp 

 

#include<setjmp.h>

 int sigsetjmp(sigjmp_buf env, int savemask);

(ret)  직접 호출되었을 때에는 0, siglongjmp 호출에서 반환된 경우에는 0이 아닌 값

   

 

 

 ◆ siglongjmp

 

#include<setjmp.h>

 void siglongjmp(sigjmp_buf env, int val);

 

 

 

 


 -------------------------------------------------------------------------------------------------------------------

 

 

 ◆ sigsuspend : 마스크 재설정과 재우는 연산을 하나의 원자적 연산으로 수행

#include<signal.h>

 int sigsuspend(const sigset_t *sigmask);

(ret)  -1 ( errno은 EINTR로 설정 )

 

 

 

 

 

 

 ◆ abort : 프로그램 비정상 종료

#include<stdlib.h>

 void abort(void);

 

 

 ◆ sleep : 호출한 프로세스를 일시정지 상태로 만드는 함수

 

#include<unistd.h>

 unsigned int sleep(unsigned int seconds);

(ret)   0 또는 덜 잠든 시간(초)

   

 

 

 ◆ psignal

#include<signal.h>

 void psignal(int signo, const char *msg);

 

 ◆ stsignal

#include<string.h>

 char *strsignal(int signo);

(ret)  신호를 설명하는 문자열을 가리키는 포인터


'Computers > Linux System Programming' 카테고리의 다른 글

ch13. Daemon process  (0) 2013.06.16
ch11. Threads  (0) 2013.06.16
+ ch9. ( addition) process relationship  (0) 2013.05.20
ch9. process relationship  (0) 2013.05.20
ch8. process control  (0) 2013.04.28