Perl/프로세스와IPC 페이지의 소스 보기
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: Perl/프로세스와IPC 는 읽기 전용 페이지입니다.
= 프로세스와 IPC = == # signal == 시스템에서 지원하는 시그널 목록은 "signal hash" %SIG의 key를 보면 알 수 있다. Config 모듈을 쓸 경우, %Config 해쉬에 시스템 정보가 들어가며, 시그널 이름들은 $Config{sig_name}에, 번호는 $Config{sig_num}에 들어 있다.
%SIG의 value는 다음 중 하나
* IGNORE * DEFAULT * 시그널 핸들러 서브루틴의 레퍼런스 주의: 시그널 핸들링 중에 다시 시그널을 받을 수 있다. 핸들러는 오래 수행되거나 시스템 명령을 사용하는 것을 피할 것
UNIX System V의 경우는 시그널 핸들러가 한 번 사용되면 해당 시그널은 디폴트 핸들러로 복귀하기 때문에 매번 다시 핸들러를 지정해야 한다. (실제 어떤 시스템에서 프로그램이 사용될 지 모르므로 이걸 가정하는 것이 안전)
SIGALRM 처리 예제
{{{#!vim perl #!/usr/bin/perl use warnings; use strict; $SIG{ALRM} = sub { die "SIGALRM received" }; # 익명 서브루틴 eval { alarm 30; my $input =
; # 입력에 30초 이상 걸린다면 die로 인하여 eval 실패 alarm 0; # 30초 안에 입력을 했다면 여기서 알람을 끔 }; if ($@) { # $@ - 마지막 eval의 에러. 에러가 없었다면 undef if ($@ =~ /SIGALRM/) { print "Operation timed out.\n"; } else { die "Something unexpected occurred; $@\n"; } } }}} == # fork, wait, exec == C에서와 유사하게... fork
* parent 프로세스에는 child의 pid반환 * child 프로세스에는 0 반환 * 실패하면 undef 반환 wait * child 프로세스가 종료될 때 parent에게 CHLD 시그널을 보냄 * CHLD시그널 핸들링 예 {{{#!vim perl $SIG{CHLD} = \&reaper; sub reaper { my $child = wait; print "Process $child has exited cleanly.\n"; $SIG{CHLD} = \&reaper; } }}} * 종료된 자식 프로세스의 PID 반환, 자식이 없는 경우 -1 반환 * 종료 상태 코드는 $?에 저장됨 == # 기타 & comments ==
----
---- [[컴퓨터분류]]
Perl/프로세스와IPC
페이지로 돌아가기 |
다른 수정본 보기