분기 된 하위 프로세스에서 croak
을 통해 예외를 throw하면 백그라운드 프로세스로 오류가 인쇄됩니다. 즉, 쉘 프롬프트를 깬다.fork 된 자식에서 croak에 의해 throw 된 예외를 부모/foreground 프로세스에 전파하려면 어떻게해야합니까?
croak
대신 die
인 경우 오류 메시지가 포 그라운드 프로세스로 나타납니다. 나는 이것이 운이없는 Carp
문서에 왜 있는지 알아 내려고 노력했습니다.
내 뜻은 이렇습니다. croak
버전 :
$ perl Wrapper.pm
$ error: ... does not exist at Wrapper.pm line 624
die
버전 :
$ perl Wrapper.pm
error: ... does not exist at Wrapper.pm line 515.
은 내가 fork
트래핑 및 STDERR에 [email protected]
를 인쇄하고 종료했지만, 그 영향을주지 않았다. 어떤 아이디어? 이 특별한 경우에 croak
을 사용할 수 있기를 바랍니다. 해결
$ perl -MCarp -e 'unless (fork) {croak "child"}'
$ child at -e line 1
<- cursor blinking here. Pressing enter gives me a new prompt:
$
$ perl -e 'unless (fork) {die "child"}'
child at -e line 1.
$
: CJM got it : 도움을
이$ perl -e '$SIG{__DIE__} = sub {sleep 1}; unless (fork) {die "child"}'
$ child at -e line 1.
덕분에 내 코드는 아주 조금 더 복잡하지만
, 여기 당신이이 문제를 재현 할 수있는 방법입니다!
자식 프로세스의'die' 호출은 부모에게 에러 메시지를 띄우거나'die' 나'croak' 메시지가 쉘 프롬프트와 관련이 있다는 것을 회의적입니다. 이 동작을 나타내는 작은 코드 스 니펫을 게시 할 수 있습니까? – mob
예, 소식이 업데이트되었습니다. –