当您从 CLI 中按 ctrl + c 时,PHP 进程是否退出?
Does a PHP process exit when you ctrl + c it from CLI?
我在我们的一台服务器上看到奇怪的磁盘 activity。我唯一能想到的是,白天有很多 PHP 进程是在屏幕模式下从 CLI 启动的,如下所示:
php -f myprocess.php
我一注意到磁盘问题,就通过附加屏幕终止了这些进程,ctrl + c 进程,以及exit
在屏幕上。我假设这会退出 PHP 过程。然而,一个小时后,磁盘 activity 仍然非常高且具有阻碍性。 (我不是系统管理员,所以我无法回溯 activity。)我知道当您向服务器发送 ajax 请求然后中止该请求 (jqxhr.abort()
) 时,服务器仍然会执行请求。我认为从 CLI 执行 "request" 时可能会发生类似的事情。这些请求是在家中通过 SSH 完成的。
那么,我的行为是否正确,进程是否应该停止,或者它们是否有可能 运行 直到完成?
让我们构建一个小测试:
# File: infinite.php
<?php
while (true) { sleep(1); }
运行吧,然后监控进程:
$ php infinite.php # screen one
$ watch -n 1 "ps aux | grep infinite.php" # watch the process (screen two)
Ctrl + C 屏幕一中的过程,而您在屏幕二中 watch
它。
结果:
进程终止。 Ctrl + C 终止活动屏幕的 PHP 进程。
如果您的客户端由于会话超时而简单地关闭,您可能会发现该过程会继续 运行。
我在我们的一台服务器上看到奇怪的磁盘 activity。我唯一能想到的是,白天有很多 PHP 进程是在屏幕模式下从 CLI 启动的,如下所示:
php -f myprocess.php
我一注意到磁盘问题,就通过附加屏幕终止了这些进程,ctrl + c 进程,以及exit
在屏幕上。我假设这会退出 PHP 过程。然而,一个小时后,磁盘 activity 仍然非常高且具有阻碍性。 (我不是系统管理员,所以我无法回溯 activity。)我知道当您向服务器发送 ajax 请求然后中止该请求 (jqxhr.abort()
) 时,服务器仍然会执行请求。我认为从 CLI 执行 "request" 时可能会发生类似的事情。这些请求是在家中通过 SSH 完成的。
那么,我的行为是否正确,进程是否应该停止,或者它们是否有可能 运行 直到完成?
让我们构建一个小测试:
# File: infinite.php
<?php
while (true) { sleep(1); }
运行吧,然后监控进程:
$ php infinite.php # screen one
$ watch -n 1 "ps aux | grep infinite.php" # watch the process (screen two)
Ctrl + C 屏幕一中的过程,而您在屏幕二中 watch
它。
结果:
进程终止。 Ctrl + C 终止活动屏幕的 PHP 进程。
如果您的客户端由于会话超时而简单地关闭,您可能会发现该过程会继续 运行。