프로그램에서 시그널 보내려면 kill, raise, abort 함수 사용하면 됨
$kill -9 3255
- PID가 3255인 프로세스를 강제로 종료하는 명령
- 인자로 지정한 프로세스에 시그널 보내는 명령
kill
#include <sys/types.h>
#incldue <signal.h>
int kill(pid_t pid, int sig);
int main(){
kill(getppid(), SIGCONT); //부모에게 ISGCONT, SIGCONT : 무시, 특별한 처리 x
kill(getpid(), SIGQUIT); //코어 덤프 발생시키며 종료, 자신에게 SIGQUIT
//이 뒤에거는 실행이 안됨
}
- pid : 시그널 받을 프로세스의 ID
- 0보다 큰 수 : pid로 지정한 프로세스에 시그널 보냄
- 0 : 특별한 프로세스(스케쥴러)를 제외 [PGID ==시그널 보내는 프로세스의 PGID]인 모든 프로세스에 시그널 보냄
- -1 아닌 음수 : PGID가 pid의 절대값인 프로세스 그룹에 속하고 시그널 보낼 권한 가진 모든 프로세스에 시그널 보냄
- -1 : 시그널 보내는 프로세스의 유효 사용자 ID가 root 아니면 특별 프로세스 제외하고
[프로세스의 실제 사용자 ID == 시그널 보내는 프로세스 유효 사용자 ID] 인 모든 프로세스에게 시그널 보냄
- sig : pid로 지정한 프로세스에 보내려는 시그널
- 0이면 시그널 안보내고 오류 확인 (널 시그널) ex) pid 가 정상인지 검사
raise
- 호출한 프로세스에 인자로 지정한 시그널 보냄
- 시그널 핸들러 호출되면 시그널 핸들러 수행 끝날 때까지 raise는 리턴 X
- 성공 0, 실패 -1 리턴
#include <signal.h>
int raise(int sig);
abort
- 호출한 프로세스에 SIGABRT 시그널 보냄
- SIGABRT
- 프로세스를 비정상적으로 종료시키고 코어 덤프 파일 생성
- 최소 해당 프로세스가 연 파일은 모두 닫음
- raise(SIGABRT)와 같은 동작 수행, 프로세스 종료시켜서 리턴 X
#include <stdlib.h>
void abort(void);