보통 for() -> execv()를 통해서 뭔가를 실행하고 실행된 결과를 받습니다. 

보통 bash, sh와 같은 command line 프로그램이 이와 같이 동작하죠


몇 가지 고려해야될 사항중에 다음과 같은 사하잉 생겨서 작성해 봅니다.


fork() -> execv() -> hang.... (WTF!) 


이럴경우 부모는 execv()한 child를 포기할줄 모르고 기다립니다 -_-);; 


그래서 다음과 같이 timer를 셋팅하면 됩니다.( 사실 여러 방법이 있는데요 sigaction, alarm등 그러나 전 .. 이방법이 좋습니다.)


alarm()를 사용하는게 가장 코드가 작고 간단할 수 있습니다. 


예를 들자면.. 



이런 코드가 있다고 할 때에 execv()로 실행시킨 프로그램이 특정 시간 이상 기다려도 응답을 하지 않을때 즉, timeout을 설정하여 해당 시간 이후에는 잘못됬다고 판단하고 kill()을 통해 실행시킨 프로그램을 죽이는 기능입니다.

그러나 저는 이 방법보다는 다음과 같은 방법을 선호합니다.





Posted by 0x616b616d61 트랙백 0 : 댓글 0

댓글을 달아 주세요