php - PHP/Python 中的死人开关

标签 php python process kill

所以这既是一个理论问题,也是一个特定于语言的问题,但考虑一下:

我需要 PHP 执行一个系统密集型进程(使用 PHP exec(); ),该进程将在后台运行,但当用户离开该特定页面时,该进程将被终止。

我很快意识到 dead man's switch 是实现这个的简单方法,因为我没有使用任何 session 变量或其他服务器端变量,它们最终可能看起来像:

if($_SERVER['REQUEST_URI'] !== 'page_with_session.php'){
    //Instead of 'session_destroy();' this would be used to kill said process
}

在任何情况下,PHP 中的 while 循环,重置 Python 脚本中的计时器或每 15 秒重新调用所述脚本,这样它就不会结束并终止进程。然而,当用户离开页面时,脚本将被调用但无法在终止进程之前重置。

这个想法有什么漏洞吗?如果不是,PHP/JS 中的实现会是什么样子?我看到它的工作顺序是:

  1. 页面被用户点击
  2. <?php exec('killer.py') ?>
  3. killer .py:
    1. 听 20 秒 - 如果没有反应......
    2. os.system('pkill process')
  4. <?php while(true){sleep(15); exec('killer.py no_wait_dont');} ?>

如果你们有任何想法,我们将不胜感激!

梅森

最佳答案

Javascript 更简单,也差不多安全(也就是说,不多)。

只需编写一个 javascript ping 函数,每 10 秒向 ping.php 发送一次内容(通过 ajax)。当在用户 session 中收到最后一个 ping 时,此 ping.php 将记录(例如 $_SESSION['last_ping'])

您可以通过将 $_SESSION['last_ping'] 与当前时间进行比较来检查其他页面的用户事件。您将不得不用它来填充您的运行时密集型页面,但它肯定会起作用。

关于php - PHP/Python 中的死人开关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11785720/

相关文章:

php - 有没有办法在 magento 的类别页面上创建选项卡

PHP:<<< 与 ob_start

python - 如何使用 read_sql 插入列匹配和不匹配的标志

python - python中的最小最大算法

windows - Windows 上的最大进程 ID 是多少?

php - 国家名称在数据库中存储为整数/数字是否比包含其名称的字符串更好?

php - 将值检索到数组中

python - 使用 sympy 求解具有复系数的多项式

java - 尝试从 java 检索 python 版本

linux - pgrep defunct 进程重启服务