코딩실수로 무한루프 발생 시 브라우저를 닫으면....
글쓴이: lampu / 작성시간: 화, 2005/09/27 - 5:20오후
안녕하세요^^
작업환경 : 아파치 2.0.53 +php..
코딩 실수로 무한루프 발생 시 해당 브라이저를 닫으면
프로세서는 작동을 멈추는 걸로 알고 있는데..
최근에 작업 도중 발생한 코딩 오류에서 브라우저를 닫아도 해당 프로세서가 중단 되지 않고 계속 돌아 당황했던 적이 있습니다.
(DB에 테이터를 특정 insert하는 프로세서였거든요^^;;)
결국 httpd를 재실행 시켜야 했었습니다.
무한루프 발생 시 브라우저를 닫으면 프로세서가 실행 중지되는거 아닌가요?
Forums:
그런 말은 처음 듣는데요...브라우저는 원격으로 아파치에 접속하는
그런 말은 처음 듣는데요...
브라우저는 원격으로 아파치에 접속하는 것 뿐인데, 아파치의 모듈로 돌고 있는 php 작업을 브라우저를 끈다고 멈출수 있다고 보기는 어려울 것 같습니다.
당연히 httpd를 재시작해야만 되겠죠.
...
leigh님 답 감사드립니다~~브라우저를 닫으면 해당 세션이 끊겨서
leigh님 답 감사드립니다~~
브라우저를 닫으면 해당 세션이 끊겨서 프로세서가 중단되는걸로 알고 있었습니다ㅡㅡ;;;
잘 못 알고 있었군요....무섭다 무한루프~~~~ :shock:
약간 맥락이 벗어나지만...PHP 기본설정으로 execute ti
약간 맥락이 벗어나지만...
PHP 기본설정으로 execute time 제한이 30초잖아요...
그래서 어찌됬건 30초 이상 넘어가면 어찌됬건간에 프로세스가 중지되지 않을까여?
execute time 제한 시간까지만 실행되고 자동으로 프로세스가 중지되니까 상관없지 않을까여??
아님 중간에 세션이 끊히면 execute time 관계없이 계속도나여??
루프가 긴 스크립트는 쉘용으로 만드는것을 추천합니다.[code:1
루프가 긴 스크립트는 쉘용으로 만드는것을 추천합니다.
$ php script.php
로 실행하면 상황을 계속 출력하면서 돌게 작성하세요.문제가 있으면 ^C 로 바로 정지되고, 백그라운드로 실행 했어도,
kill 번호로 그것만 죽일 수 있으니,
아파치 재시동 보다 훨씬 부담이 적지요.
인자는 argc, argv 로 받을 수 있고, 복잡하면 ini 같은걸로 해도 되겠죠.
https://xenosi.de/
[quote="tiziman"]약간 맥락이 벗어나지만...PHP
기본 설정은 30초지만 보통 설치할 때 바꾸게 되니까...
무한 루프 생길까 걱정되는 스크립트면 ini_set() 함수로 실행시간 제한을 스크립트 처음에 걸어두는게 좋을 지도 모르겠네요.
저도 [b]lampu[/b]님 같은 무한루프에 대한 문제가 발생한 적이
저도 lampu님 같은 무한루프에 대한 문제가 발생한 적이 있습니다.
max execute time 이 제한 되어 있었는데도 불구하고, 계속 무한 루프를 돌아서(10시간 이상) 결국 웹서퍼의 프로세스가 모든 메모리를 다 소모해서 서버가 다운되버린 상황까지 갔었습니다.
지금도 여전히 왜 제한 시간 이후에 정지 하지 않았을까 하는 의문이 남았습니다.
다른 분도 그런 경우가 있다면, 혹시 max execute time 처리 로직에 버그가 있는게 아닐까 하는 생각도 조심스럽게 해봅니다.
그리고 브라우져를 닫는 것과 웹서버의 프로세스가 정지하는 것은 무관하다고 하셨는데, 그렇지 않습니다.
웹서버에서 브라우져로 전달해야할 데이터를 모두 전달하기 전에 (웹서버의 socket output buffer 에 데이터가 남아있는데 클라이언트가 소켓을 닫았을 때)는 이를 웹서버가 감시해서 php 에 abort 한 것을 알립니다.
그리고 이것에 대해 PHP 코딩으로 이 상황을 핸들링 할 수도 있습니다.
자세한 내용은 다음 사이트에 가시면 있습니다.
http://kr.php.net/manual/en/features.connection-handling.php
댓글 달기