因此,这既是一个理论问题,也是一个特定于语言的问题,但请考虑以下问题:
我需要PHP来执行一个相当系统密集的进程(使用exec();),该进程将在后台运行,但是当用户离开该特定页面时,该进程将被终止。
我很快意识到,一个死人的开关是实现这一点的一个简单方法,因为我没有使用任何会话变量或其他服务器端变量,这些变量最终可能看起来如下所示:
if($_SERVER['REQUEST_URI'] !== 'page_with_session.php'){
//Instead of 'session_destroy();' this would be used to kill said process
}在任何情况下,PHP中的while循环,重置Python脚本中的计时器,或者每15秒重新调用said脚本,这样它就不会结束并终止进程。但是,当用户离开页面时,脚本将被调用,但无法在终止进程之前重置。
这个想法有什么漏洞吗?如果不是,PHP/JS中的实现会是什么样子?我认为它起作用的顺序是:
<?php exec('killer.py') ?>os.system('pkill process')
<?php while(true){sleep(15); exec('killer.py no_wait_dont');} ?>如果你们有任何想法,我们会非常感激的!
梅森
发布于 2012-08-02 22:05:51
Javascript要容易得多,而且几乎是安全的(也就是说,不太安全)。
只需编写一个javascript函数,它每10秒发布一次东西给ping.php (通过ajax)。当在用户会话中接收到最后一个ping时,这个ping.php将进行日志记录(例如在$_SESSION['last_ping']中)
您可以通过将$_SESSION['last_ping']与当前时间进行比较来检查其他页面的用户活动。您将不得不用这个来增加运行时密集型页面,但它肯定会起作用的。
发布于 2012-08-02 22:18:55
在JS中实现心跳。如果它停止超过一段时间,则终止子进程:
如果不能将自毁机制添加到子进程中,则需要一个监视进程,该进程将接收信号并杀死子进程。它不太可靠,因为您需要确保观察者进程正在运行。
https://stackoverflow.com/questions/11785720
复制相似问题