2013-04-05 1 views
3

필자는 perl에 새로운 글이며 스크립트를 던지면 키보드 인터럽트와 term 시그널을 잡기 위해 스크립트에 기능을 추가하려고했다가 처리 할 OS 명령을 내 보낸다. 또한 신호가 보내지지 않고 스크립트가 성공적으로 실행되는 경우에도 동일한 OS 명령 및 하위 명령을 실행해야합니다 (END 블록 참고). 늘어나는만큼 연구 및 테스트에서 말할 수있는, 당신은 각 신호에 대한 신호 처리기를 등록해야합니다. 각각의 경우에, 그들은 동일한 하위를 트리거해야합니다. 하나의 $ SIG에서 가능합니까? 아니면 각 신호마다 하나씩 등록해야합니까? 여기 내 코드가있다.펄 하나의 서브 루틴을 가리키는 여러 개의 시그널 핸들러

sub issueKdestroy{ 
    system("kdestroy -q"); 
    exit(1); 
} 
$SIG{INT} = (\&issueKdestroy); 
$SIG{TERM} = (\&issueKdestroy); 
END{ 
    issueKdestroy(); 
} 

시험에서,이 작동하지 않습니다

$SIG{'INT', 'TERM'} = (\&issueKdestroy); 

그것은 위의 코드에서 INT 또는 TERM을 인식하지 못합니다. 제안 사항?

+3

'$ SIG {INT} = $ SIG {TERM} = \ & issueKdestroy'? – mob

+2

'$ SIG ($ _) = \ & qw (INT TERM)'에 대해 Kdestroy를 발행 하시겠습니까? – mob

+2

'@SIG { 'INT', 'TERM'} = (\ & issueKdestroy) x 2'? – mob

답변

2

$SIG{'INT', 'TERM'}은 의미가 아닙니다. 그런 두 키에 대한 값을 지정, 해시 조각을 사용하여 (두 개의 값을 제공) : 대신 $

@SIG{'INT', 'TERM'} = (\&issueKdestroy, \&issueKdestroy); 

을, 당신은 여러 개의 키가 지정되었지만 저장할 수 허용 된 perl4의 스타일 다차원 배열 에뮬레이션을 호출 할 상당 그 하나의 해시의 모든 : $;는 기본적으로 chr(0x1c)입니다

$SIG{ join $;, 'INT', 'TERM' } 

.

관련 문제