3. 시그널 전송 방법(시스템 콜)

System Program/signal 2013. 7. 8. 11:57

1. Kill 함수를 이용하여 시그널 보내기

 

signal을 전송하기 위한 가장 간단한 방법은 kill(2) 시스템함수를 이용하는 것으로, kill의 사용방법은 다음과 같다. - shell의 kill 명령과 혼동하지 말자. -

 

#include <sys/types.h>

#include <signal.h>

int kill(pid_t pid, int sig) ;

 

                                성공하면, '0'을 리턴, 에러가 발생하면 '-1'을 리턴

 

pid는 시그널을 받을 프로세스의 pid로 그룹 혹은 특정 pid에 시그널을 보낼 수 있다.

  • pid > 0 : pid에 대응되는 프로세스에 시그널을 보낸다.
  • pid == 0 : 현재프로세스에 속한 모든 그룹의 프로세스에 시그널을 보낸다.
  • pid == -1 : 1번 프로세스 (init) 를 제외한 모든 프로세스에 시그널을 보낸다.
  • pid < -1 : 프로세스 그룹에서 절대값으로 동일한 모든 프로세스에게 시그널을 보낸다.  

 어떤 프로세스도 명시된 pid와 일치하지 않으면 kill()은 실패하고 errno를 ESRCH(해당프로세스없음)로 설정한다.

프로세스가 요청된 PID에 시그널을 보낼 권한이 없는 경우 kill()은 실패하고, errno는 EPERM으로 설정한다.

 

2. Raise() 시그널 전송

 

프로세스 자기 자신에게 시그널을 보낼 때 사용된다.

예제는 생략한다.

 

#include <sys/types.h>

#include <signal.h>

int raise(int sig) ;

 

                                성공하면, '0'을 리턴, 에러가 발생하면 '0'이 아닌 값을 리턴

 

3. killpg()를 통한 시그널 전송

 

프로세스 그룹의 모든 맴버에게 시그널을 전송한다.  

 

#include <sys/types.h>

#include <signal.h>

int killpg(pid_t pgrp, int sig) ;

 

                                성공하면, '0'을 리턴, 에러가 발생하면 '-1'값을 리턴

 

 

 

'System Program > signal' 카테고리의 다른 글

1. 개념과 개요  (0) 2014.02.19
6. sigaction() 함수에 대한 고찰  (0) 2013.07.08
5. (1 ~ 4)장에 대한 총괄 예제  (0) 2013.07.08
2. 시그널의 종류와 사용법  (0) 2013.07.08
: