◆ 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 |