如何运行程序或脚本并稍后识别它以检查它是否仍在运行?
例如:我正在后台运行一个 PHP 脚本,该脚本运行了大约 10 个小时(从不同的 API 等获取大量数据)。当我跑步时顶部我看到了过程php仍在运行。但是如果我同时运行第二个 PHP 脚本怎么办?如何识别哪个是第一个,哪个是第二个?
我需要它,因为我想知道脚本在几个小时后是否仍在运行。
更新
我使用以下命令来识别 PHP 进程并查看它是否仍在运行:
ps cax | grep "php$" | grep -o '^[ ]*[0-9]*'
我将它与 PHP 一起使用$pid = exec("..");
,然后检查是否$pid
大于 0。如果不大于 0,则它没有运行,否则它正在运行,并且我有进程 ID。
答案1
答案2
简短的回答:你不能。
中等答案:在启动 PHP 进程的父进程之外,您无法 100% 可靠地识别该进程。
长答案:Bash 进程管理
归根结底top
,ps
不能依赖 、 等来明确标识由另一个进程启动的进程。进程意外终止。 PID 被回收。进程名称可以更改。
您可以从单个长期守护进程/进程启动所有内容吗?这是你最好的选择。至少让父进程存储 PHP 进程的 PID...尽管这并不是万无一失的。如果您愿意承担出现严重错误的风险,请阅读该页面以找出减轻风险的方法。
(当然,该页面的基调相当僵化,但该网站的目标是正确性。如果您没有运行关键任务服务或人们生活所依赖的东西,您可以稍微捏造一些东西。)
要回答第二部分,如果您有您认为正确的 PID,那么您可以确定它是否仍在运行
kill -0 <PID> && echo 'The process is still running!'