gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

自殺はしないで欲しいんですが………

PHPでかなり重い処理をかけてました。まぁテスト的なニュアンスも強いものではあったのですが。
あるタイミングで
Killed
で落ちました。………あれ?
念のため、PHP君のソースをgrep。文字列に一致する文面はなし。
九分九厘メモリまわりなので追いかけてみました。

Zend/zend_alloc.c

ZEND_API void *_emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
より


p = (zend_mem_header *) ZEND_DO_MALLOC(sizeof(zend_mem_header) + MEM_HEADER_PADDING + SIZE + END_MAGIC_SIZE);

if (!p) {
fprintf(stderr,"FATAL: emalloc(): Unable to allocate %ld bytes\n", (long)size);
#if ZEND_DEBUG && defined(HAVE_KILL) && defined(HAVE_GETPID)
kill(getpid(), SIGSEGV);
#else
exit(1);
#endif
HANDLE_UNBLOCK_INTERRUPTIONS();
return (void *)p;
}

…………………え?

exit(1);

これは…言語処理系が許される範疇内の処理なんでしょうか?
っつかせめてガベコレ動かして様子見るとかなんとかないもんなんでしょうか???
ちなみに無論当然。exitでぬけているので、例外での捕捉すら不可能です。これは確認しました。
確認はしてないけど。CGI経由で動いてる場合、多分Apacheプロセスも落ちるんじゃないかな?

あいも変わらずPHPクォリティZendクォリティ、素晴らしいです。