[첫화면으로]Perl/프로세스와IPC

마지막으로 [b]

프로세스와 IPC

1. signal

시스템에서 지원하는 시그널 목록은 "signal hash" %SIG의 key를 보면 알 수 있다. Config 모듈을 쓸 경우, %Config 해쉬에 시스템 정보가 들어가며, 시그널 이름들은 $Config{sig_name}에, 번호는 $Config{sig_num}에 들어 있다.1

%SIG의 value는 다음 중 하나2

주의: 시그널 핸들링 중에 다시 시그널을 받을 수 있다. 핸들러는 오래 수행되거나 시스템 명령을 사용하는 것을 피할 것3

UNIX System V의 경우는 시그널 핸들러가 한 번 사용되면 해당 시그널은 디폴트 핸들러로 복귀하기 때문에 매번 다시 핸들러를 지정해야 한다. (실제 어떤 시스템에서 프로그램이 사용될 지 모르므로 이걸 가정하는 것이 안전)4

SIGALRM 처리 예제5
#!/usr/bin/perl
use warnings;
use strict;

$SIG{ALRM} = sub { die "SIGALRM received" };  # 익명 서브루틴

eval {
    alarm 30;
    my $input = <STDIN>;  # 입력에 30초 이상 걸린다면 die로 인하여 eval 실패
    alarm 0;              # 30초 안에 입력을 했다면 여기서 알람을 끔
};

if ($@) {  # $@ - 마지막 eval의 에러. 에러가 없었다면 undef
    if ($@ =~ /SIGALRM/) {
        print "Operation timed out.\n";
    } else {
        die "Something unexpected occurred; $@\n";
    }
}

2. fork, wait, exec

C에서와 유사하게...

fork6

wait
$SIG{CHLD} = \&reaper;
sub reaper {
   my $child = wait;
   print "Process $child has exited cleanly.\n";
   $SIG{CHLD} = \&reaper;
}

3. 기타 & comments

이름:  
Homepage:
내용:
 


컴퓨터분류
각주:
1. 2. 3. 4. 5. 6. Beginning Perl, Chapter 14

마지막 편집일: 2016-2-4 5:40 pm (변경사항 [d])
2107 hits | Permalink | 변경내역 보기 [h] | 페이지 소스 보기