Microsoft PowerPoint - 10_Signal

Similar documents
<4D F736F F F696E74202D BDC3B1D7B3CEB0FA20BDC3B1D7B3CE20C3B3B8AE2E707074>

좀비프로세스 2

제1장 Unix란 무엇인가?

슬라이드 1

Chap04(Signals and Sessions).PDF

2009년 상반기 사업계획

Microsoft PowerPoint - ch07_시그널 [호환 모드]

본 강의에 들어가기 전

The Pocket Guide to TCP/IP Sockets: C Version

1장. 유닉스 시스템 프로그래밍 개요

Microsoft PowerPoint - SP6장-시그널.ppt [호환 모드]

ABC 11장

6주차.key

/chroot/lib/ /chroot/etc/

리눅스 프로세스 관리

System Programming Lab

Microsoft PowerPoint - chap9 [호환 모드]

<C1A63130C0E5C7C1B7CEBCBCBDBA2E687770>

PowerPoint 프레젠테이션

Microsoft PowerPoint - 09-Pipe

Chapter #01 Subject

The Pocket Guide to TCP/IP Sockets: C Version

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

chap12(process).hwp

임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

10.

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

슬라이드 1

The Pocket Guide to TCP/IP Sockets: C Version

5. 소켓 프로그래밍

Microsoft PowerPoint - 10_Process

3. 다음장에나오는 sigprocmask 함수의설명을참고하여다음프로그램의출력물과그출력물이화면이표시되는시점을예측하세요. ( 힌트 : 각줄이표시되는시점은다음 4 가지중하나. (1) 프로그램수행직후, (2) kill 명령실행직후, (3) 15 #include <signal.

Chap06(Interprocess Communication).PDF

제9장 프로세스 제어

강의10

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

<4D F736F F F696E74202D FC7C1B7CEBCBCBDBA20BBFDBCBAB0FA20BDC7C7E0205BC8A3C8AF20B8F0B5E55D>

2009년 상반기 사업계획

슬라이드 1

Microsoft PowerPoint - 12 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 1.ppt

제1장 Unix란 무엇인가?

Abstract View of System Components

Microsoft PowerPoint - chap06-2pointer.ppt

<4D F736F F F696E74202D FC7C1B7CEBCBCBDBABFCD20BBE7BFEBC0DA20B8EDB7C920C0CDC8F7B1E22E >


금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - ch09_파이프 [호환 모드]

2009년 상반기 사업계획

Microsoft PowerPoint - additional01.ppt [호환 모드]

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

PowerPoint 프레젠테이션

슬라이드 1

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

윤성우의 열혈 TCP/IP 소켓 프로그래밍

<4D F736F F F696E74202D FB8DEB8F0B8AE20B8C5C7CE205BC8A3C8AF20B8F0B5E55D>

3. 다음장에나오는 sigprocmask 함수의설명을참고하여다음프로그램의출력물과그출력물이화면이표시되는시점을예측하세요. ( 힌트 : 각줄이표시되는시점은다음 6 가지중하나. (1) 프로그램수행직후, (2) 5 초후 (3) 10 초후 (4) 15 #include <signa

untitled

Microsoft Word - Network Programming_NewVersion_01_.docx

2009년 상반기 사업계획

UI TASK & KEY EVENT

11장 포인터

슬라이드 1

K&R2 Reference Manual 번역본

Microsoft PowerPoint - 13 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 2.ppt

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

Microsoft PowerPoint - chap10-함수의활용.pptx

슬라이드 1

제1장 Unix란 무엇인가?

2009년 상반기 사업계획

Microsoft PowerPoint APUE(Intro).ppt

제1장 Unix란 무엇인가?

Chapter ...

제12장 파일 입출력

Microsoft PowerPoint - polling.pptx

UI TASK & KEY EVENT

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Sena Technologies, Inc. HelloDevice Super 1.1.0

Frama-C/JESSIS 사용법 소개

4. What will be the output of this program? Explain results for each variable and each thread. #include "apue.h" int var=1; pthread_mutex_t lock; void

The Pocket Guide to TCP/IP Sockets: C Version

Microsoft PowerPoint - chap11-포인터의활용.pptx

Act84_

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - C++ 5 .pptx

제11장 프로세스와 쓰레드

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

슬라이드 1

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서

- 코드로읽는리눅스디바이스드라이버 강남용

ATmega128

Lab 3. 실습문제 (Single linked list)_해답.hwp

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

The OSI Model

vi 사용법

PowerPoint 프레젠테이션

gdb 사용법 Debugging Debug라는말은 bug를없앤다는말이다. Bug란, 컴퓨터프로그램상의논리적오류를말하며, 이것을찾아해결하는과정이바로, debugging이다. 초기컴퓨터들은실제벌레가컴퓨터에들어가서오작동을일으키는경우가있었다고하며, 여기서 debug 이라는말이

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

Transcription:

Operating System Laboratory 시그널 - IPC - 시그널의종류 - 시그널구현함수 IPC 프로세스간통신 (Inter-Process Communication) 실행중인프로세스간에데이터를주고받는기법 IPC 에는매우많은방법이있다! File Pipe/Named pipe Socket Shared memory Message passing Remote Procedure Call (RPC)

시그널 특정이벤트가발생했을때프로세스에게전달하는 신호 연산오류발생, 자식프로세스의종료, 사용자의종료요청등 굉장히작은값이다. 인터럽트 (interrupt) 라고부르기도한다. 용도가제한적이며여러시그널이겹칠경우원치않는결과가발생할위험이있다. 시그널은여러종류가있고각각에유일한번호가붙여져있다. 프로그램내에서는매크로상수를사용한다. 예 1) Ctrl + C 를누를때 SIGTERM 이전달된다. 예 2) kill 명령을사용하면해당프로세스에게 SIGTERM 이전달된다. 시그널 시그널을수신한프로세스의반응 1. 시그널에대해기본적인방법으로대응한다. 대부분의시그널에대해서프로 세스는종료하게된다. 2. 시그널을무시한다. 단, SIGKILL과 SIGSTOP은무시될수없다. 3. 프로그래머가지정한함수 ( 핸들러 ) 를호출한다. 시그널핸들러 (handler) 프로세스가특정시그널을포착했을때수행해야할별도의함수 프로세스는시그널을포착하면현재작업을일시중단하고시그널핸들러를실행 시그널핸들러의실행이끝나면중단된작업을재개 시그널종류 "/usr/include/asm/signal.h"

시그널 시그널 SIGABRT 설명 process aborted 시그널 SIGALRM 설명 signal raised by alarm SIGBUS bus error SIGCHLD child process terminated SIGCONT continue if stopped SIGFPE floating point exception SIGHUP hangup SIGILL illegal instruction SIGINT interrupt SIGKILL kill SIGPIPE write to pipe SIGQUIT quit and dump core SIGSEGV segmentation violation SIGSTOP stop temporarily SIGTERM termination SIGTSTP terminal stop signal SIGTTIN/ SIGTTOU background process attempting to read/write SIGUSR1/ SIGUSR2 user defined 1/2 SIGPOLL pollable event SIGPROF profiling timer expired SIGSYS bad syscall SIGTRAP trace/breakpoint trap SIGURG urgent data available SIGVTALRM virtual timer expired SIGXCPU CPU time limit exceeded SIGXFSZ file size limit exceeded 시그널구현함수 시그널을다루기위해필요한시스템호출 / 표준라이브러리함수 sigemptyset sigfillset sigaddset sigdelset sigaction sigprocmask kill raise alarm pause 함수 의미시그널집합을시그널이없는비어있는상태로초기화시그널집합을모든시그널이포함된상태로초기화시그널집합에특정시그널을추가시그널집합에서특정시그널을삭제특정시그널에대한프로세스의행동을설정봉쇄할시그널의목록을변경특정프로세스에게특정시그널을전달자기자신에게특정시그널을전달설정된시간이경과한후에자기자신에게시그널을전달시그널이도착할때까지대기상태유지

시그널처리과정 프로그램에서처리할시그널선정 (sigfillset, sigaddset, ) 시그널을처리할동안방해받지않도록 mask 설정 (sigprocmask) 각시그널에대한처리행동지정 (handler 함수구현 ) signal 프로세스 handler mask 에설정된시그널금지 handler 실행금지된시그널해제수신된시그널이있으면반복 시그널집합조작 시그널집합을생성하거나조작 시그널을다루려면시그널집합을만들어야한다. #include <signal.h> int sigemptyset (sigset_t *set); int sigfillset (sigset_t *set); int sigaddset (sigset_t *set, int signum); int sigdelset (sigset_t *set, int signum); int sigismember (const sigset_t *set, int signum); set signum 반환값 sigset_t 형의시그널집합 시그널번호호출이성공하면 0을반환, 실패하면 -1을반환한다. sigismember는호출이성공하면 1이나 0을반환하고실패하면 -1을반환한다.

시그널집합조작 사용예 sigset_t set; int result; sigemptyset(&set); sigfillset(&set); sigdelset(&set, SIGALRM); sigaddset(&set, SIGALRM); result = sigismember(set, SIGALRM); sigaction 특정한시그널을받았을때프로세스가취해야할행동을지정 signum 으로지정한시그널에대해서 act 로지정한행동을취한다. 새로운행동인 act 가등록되면서기존의행동은 oldact 에저장된다. #include <signal.h> int sigaction (int signum, const struct sigaction *act, struct sigaction *oldact); signum act oldact 반환값 시그널번호이다. SIGKILL과 SIGSTOP은적용할수없다. 프로세스가지정한시그널에대해서취해야할행동에관한정보가담겨져있다. 이전에지정되어있는시그널에대한행동이저장된다. 보통 NULL 값을사용한다. 호출이성공할경우 0을반환하고, 실패하면 -1을반환한다.

sigaction struct sigaction 시그널핸들러, signum 으로지정한특정시그널이들어왔을때수행해야할행동을저장하는구조체 struct sigaction { void (*sa_handler)(int); void (*sa_sigaction)(int, siginfo_t *, void *); sigset_t sa_mask; int sa_flags; } sa_handler: 시그널에대응하는행동 SIG_DFL SIG_IGN 함수의포인터 기본적으로설정된행동. 대부분의시그널에대해서프로세스는종료. 해당시그널을무시. 지정한시그널에대한행동없음. ( 단, SIGSTOP과 SIGKILL은무시할수없음 ) 사용자가지정한함수 sigaction sa_sigaction sa_handler 대신에사용할수있다. sa_handler 에비해추가정보를알수있다. sa_sigaction 과 sa_handler 중에하나만사용한다. sa_sigaction 을사용하려면 sa_flags 를 SA_SIGINFO 로지정한다. sa_mask 시그널마스크 : 봉쇄된시그널들의집합 sa_mask 에등록된시그널은시그널핸들러가실행되는동안봉쇄된다. 봉쇄 (blocking) 무시가아니라시그널핸들러실행이완료될때까지처리가미뤄진다. 현재처리중인시그널도봉쇄된다.

sigaction sa_flags 시그널처리절차를수정하는데사용된다. 여러플래그를사용하고싶으면 (bitwise-or) 사용 값 SA_SIGINFO SA_NOCLDSTOP SA_RESETHAND SA_NODEFER sa_handler 대신에 sa_sigaction을선택 signum이 SIGCHLD일때자식프로세스가종료되거나중단되더라도부모프로세스는이를알려고하지않는 다. 의미 signum에대해서시그널핸들러를최초에한번만실행하고그다음부터는동일한시그널에대해서 SIG_DFL에해당하는기본적인동작만수행하게된다. 시그널핸들러내에서시그널받는것을금지하지않는다. 즉, 마스크를사용하지않는다. sigaction 실행결과 : 프로그램실행도중 ^C 로시그널을보낸다.

sigprocmask 시그널집합단위로봉쇄될시그널목록설정 프로세스가대단히중요한코드를실행중일때작업에방해를받지않기위해시그널을무시할수도있다. #include <signal.h> int sigprocmask (int how, const sigset_t *set, sigset_t *oldset); how set oldset 반환값 sigprocmask 함수의행동방식을결정새롭게적용하는시그널마스크이전에적용되어있는시그널마스크를저장호출이성공할경우 0을반환하고, 실패하면 -1을반환한다. 시그널봉쇄 중요한작업수행 시그널봉쇄해제 how 값 SIG_BLOCK SIG_UNBLOCK SIG_SETMASK sigprocmask 의미현재봉쇄설정된시그널의목록에두번째인자 set에포함된시그널을추가한다. 현재봉쇄설정된시그널의목록에서두번째인자 set에포함된시그널을제외한다. 현재봉쇄설정된시그널의목록을두번째인자 set가가진목록으로대체한다.

sigprocmask 실행결과 : 프로그램실행도중 ^C 로시그널을보낸다. kill/raise 프로세스에시그널전달 kill: 특정프로세스나프로세스그룹에게지정한시그널을전달 raise: 자기자신에게지정한시그널을전달한다. #include <sys/types.h> #include <signal.h> int kill (pid_t pid, int sig); #include <signal.h> int raise (int sig); pid sig 반환값 프로세스의식별번호시그널번호호출이성공하면 0을반환, 실패하면 -1을반환

kill/raise kill 에서 pid 값에따른의미 pid pid > 0 pid = 0 pid = -1 pid < -1 의미 특정프로세스에시그널전달자신과같은그룹에있는모든프로세스에시그널전달시그널전달이허용된모든프로세스에시그널전달. 단, 프로세스식별번호가 1인프로세스 (init) 는제외. 프로세스그룹식별번호가 -pid인모든프로세스에게시그널전달 raise 는 kill 의특정한형태 raise(sig); kill (getpid(), sig); alarm 지정한시간이경과한후자신에게 SIGALRM 시그널을보낸다. #include <unistd.h> unsigned int alarm (unsigned int seconds); seconds 반환값 초단위의시간지정한시간중남은시간을반환한다. 0 이상의값이다. alarm 설정은한번에하나만등록할수있다. 여러개를누적해서등록할수없다. 마지막에등록한하나의 alarm 만유효하다. 이전에등록된 alarm 은취소된다. 지금까지사용했던 sleep 함수는 alarm 을사용하여구현되었다. sleep 과 alarm 은함께사용하지않는것이좋다.

alarm 실행결과 pause 시그널이전달될때까지대기 #include <unistd.h> int pause(void); 반환값 항상 -1 을반환 아무시그널이나상관없다. 수신된시그널이프로세스를종료시키는것이라면프로세스는 pause 상태에서벗어나자마자종료된다. 무시하도록설정된시그널에대해서는반응하지않는다. 시그널핸들러가등록된시그널이라면시그널핸들러를실행하고나서 pause 상태를벗어난다.

pause 실행결과 : 프로그램실행도중 ^C 로시그널을보낸다. 예제 처리할시그널수 시그널추가및핸들러설정 SIGUSR1 제한 flag 가 0 이될때까지 1 초간격으로출력

예제 SIGUSR1 을자신에게전달. 효과는? 각시그널에대해번호를출력