gpt4 book ai didi

PHP:如何在 Linux 上唯一标识一个进程?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:34:41 24 4
gpt4 key购买 nike

我正在使用 php 进程在后台发送电子邮件,我正在尝试找到一种自动恢复的方法,以防服务器出现故障或脚本发生某些问题使其停止。

我的逻辑是:如果发送 session 仍在运行但在 X 时间内没有发送新电子邮件,则终止该进程(如果它已经在运行)并启动一个新进程。

现在,我的问题出在“如果已经运行则终止进程”部分。我如何确定这个 PID 的进程与我为发送 session 启动的进程相同?我无法检查名称,因为我将同时运行其中的几个。我不想杀死一个随机进程或另一个发送进程。

所以问题是:如何唯一标识在 linux 上运行的进程?或者我怎样才能以某种方式标记它以使其独一无二?有没有办法从外部检查它的参数?

最佳答案

与评论中的建议不同,由于 PID 重用(唯一 PID 的数量有限,通常为 32768 ,加剧了这种情况),PID 足以唯一标识进程。但是,如果您将进程的 pid 和开始时间结合起来,那在实践中应该是足够独特的。并且开始时间内核滴答记录在/proc/$pid/stat 中,考虑到这一点,您可以像这样制作一个独特的散列:

function unique_hash_pid(int $pid): string {
return $pid . ':' . (explode ( ' ', file_get_contents ( '/proc/' . $pid . '/stat' ) ) [21]);
}

(我想象一个进程启动的机会,然后由 PHP 唯一标识,然后退出,然后另一个进程启动,并重新分配给完全相同的 pid,所有这些都在一个内核 tick 下,实际上是......零。因此这个散列应该是唯一的。如果有人对此进行实验室测试,请告诉我!)

但是,要知道此函数不考虑重启,并且可能会在两次重启之间为 2 个完全不同的进程生成相同的哈希值(如果在两次重启之间的完全相同的内核滴答上启动相同的 pid。我想这很常见用于启动脚本)

关于PHP:如何在 Linux 上唯一标识一个进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21458095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com