코딩실수로 무한루프 발생 시 브라우저를 닫으면....

lampu의 이미지

안녕하세요^^

작업환경 : 아파치 2.0.53 +php..

코딩 실수로 무한루프 발생 시 해당 브라이저를 닫으면
프로세서는 작동을 멈추는 걸로 알고 있는데..
최근에 작업 도중 발생한 코딩 오류에서 브라우저를 닫아도 해당 프로세서가 중단 되지 않고 계속 돌아 당황했던 적이 있습니다.
(DB에 테이터를 특정 insert하는 프로세서였거든요^^;;)
결국 httpd를 재실행 시켜야 했었습니다.

무한루프 발생 시 브라우저를 닫으면 프로세서가 실행 중지되는거 아닌가요?

leigh의 이미지

그런 말은 처음 듣는데요...

브라우저는 원격으로 아파치에 접속하는 것 뿐인데, 아파치의 모듈로 돌고 있는 php 작업을 브라우저를 끈다고 멈출수 있다고 보기는 어려울 것 같습니다.

당연히 httpd를 재시작해야만 되겠죠.

...

lampu의 이미지

leigh님 답 감사드립니다~~
브라우저를 닫으면 해당 세션이 끊겨서 프로세서가 중단되는걸로 알고 있었습니다ㅡㅡ;;;

잘 못 알고 있었군요....무섭다 무한루프~~~~ :shock:

imtak의 이미지

약간 맥락이 벗어나지만...

PHP 기본설정으로 execute time 제한이 30초잖아요...

그래서 어찌됬건 30초 이상 넘어가면 어찌됬건간에 프로세스가 중지되지 않을까여?

execute time 제한 시간까지만 실행되고 자동으로 프로세스가 중지되니까 상관없지 않을까여??

아님 중간에 세션이 끊히면 execute time 관계없이 계속도나여??

송효진의 이미지

루프가 긴 스크립트는 쉘용으로 만드는것을 추천합니다.

$ php script.php 로 실행하면 상황을 계속 출력하면서 돌게 작성하세요.

문제가 있으면 ^C 로 바로 정지되고, 백그라운드로 실행 했어도,
kill 번호로 그것만 죽일 수 있으니,
아파치 재시동 보다 훨씬 부담이 적지요.

인자는 argc, argv 로 받을 수 있고, 복잡하면 ini 같은걸로 해도 되겠죠.

dsh의 이미지

tiziman wrote:
약간 맥락이 벗어나지만...

PHP 기본설정으로 execute time 제한이 30초잖아요...

그래서 어찌ㅤㄷㅚㅆ건 30초 이상 넘어가면 어찌ㅤㄷㅚㅆ건간에 프로세스가 중지되지 않을까여?

execute time 제한 시간까지만 실행되고 자동으로 프로세스가 중지되니까 상관없지 않을까여??

아님 중간에 세션이 끊히면 execute time 관계없이 계속도나여??

기본 설정은 30초지만 보통 설치할 때 바꾸게 되니까...

무한 루프 생길까 걱정되는 스크립트면 ini_set() 함수로 실행시간 제한을 스크립트 처음에 걸어두는게 좋을 지도 모르겠네요.

ssehoony의 이미지

저도 lampu님 같은 무한루프에 대한 문제가 발생한 적이 있습니다.
max execute time 이 제한 되어 있었는데도 불구하고, 계속 무한 루프를 돌아서(10시간 이상) 결국 웹서퍼의 프로세스가 모든 메모리를 다 소모해서 서버가 다운되버린 상황까지 갔었습니다.
지금도 여전히 왜 제한 시간 이후에 정지 하지 않았을까 하는 의문이 남았습니다.
다른 분도 그런 경우가 있다면, 혹시 max execute time 처리 로직에 버그가 있는게 아닐까 하는 생각도 조심스럽게 해봅니다.

그리고 브라우져를 닫는 것과 웹서버의 프로세스가 정지하는 것은 무관하다고 하셨는데, 그렇지 않습니다.
웹서버에서 브라우져로 전달해야할 데이터를 모두 전달하기 전에 (웹서버의 socket output buffer 에 데이터가 남아있는데 클라이언트가 소켓을 닫았을 때)는 이를 웹서버가 감시해서 php 에 abort 한 것을 알립니다.
그리고 이것에 대해 PHP 코딩으로 이 상황을 핸들링 할 수도 있습니다.
자세한 내용은 다음 사이트에 가시면 있습니다.
http://kr.php.net/manual/en/features.connection-handling.php

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.