apache_child_terminate

(PHP 4 >= 4.0.5, PHP 5, PHP 7, PHP 8)

apache_child_terminate在本次请求后终止 apache 进程

说明

apache_child_terminate(): void

apache_child_terminate() 将在当前 PHP 请求执行的 Apache 进程注册到完成执行 PHP 代码后终止。它可以用于在运行完内存消耗高的脚本后终止进程,因为内存通常只会在内部释放,而不会返还给操作系统。

适用于 Apache 和 FastCGI Web 服务器。

参数

此函数没有参数。

返回值

不返回值。

注释

注意: 此函数在 Windows 平台上未实现。

参见

  • exit() - 输出消息并终止当前脚本

添加注释

用户贡献的注释 5 条注释

Stephan Ferraro
14 年前
我找到了 Apache 2 的解决方案。但是这仅在没有线程的情况下有效,并且仅在 POSIX 兼容的操作系统(例如 Linux、OpenSolaris...)上有效。

<?php

// 在请求完成后通过发送 SIGWINCH POSIX 信号 (28) 来终止 Apache 2 子进程。
function kill_on_exit() {
posix_kill( getmypid(), 28 );
}

register_shutdown_function( 'kill_on_exit' );

?>
jasonlester at nope dot com
1 年前
在 FastCGI SAPI 上,这不会杀死进程,它只是在脚本结束时让 FastCGI 处理程序完全回收 PHP,而不是只回收请求状态。这包括 php-cgi。
louis at ewens dot com
16 年前
Apache 子进程很贪婪。如果它们因需要大量内存的 PHP 应用程序而变得臃肿,它们将保持这种状态。内存永远不会返还给操作系统,直到该子进程死亡。

您可以在 Apache 中使用 MaxRequestsPerChild 来在一定数量的连接后自动杀死所有子进程。或者,您可以在内存密集型函数后使用 apache_child_terminate 来杀死子进程。

注意:apache_child_terminate 在 Apache 2.0 处理程序中不可用。
daniele_dll at yahoo dot it
16 年前
回复 sam at liddicott dot com

这并不简单!您永远不应该杀死 Apache 进程,因为当 Apache 需要时,它会自动释放!

而且,如果您使用 Apache worker 或基于线程的 MPM,您有风险杀死整个进程!

结果:不要使用此函数!
admin at hostultra dot com
16 年前
此代码将在不存在的情况下添加 apache_child_terminate() 函数。

if (!function_exists("apache_child_terminate")){
function apache_child_terminate(){
register_shutdown_function("killonexit");
}

function killonexit(){
@exec("kill ".getmypid());
}
}
To Top