我不具体了解 PHP,但您可以沿着进程树向上走,直到找到 init 或 cron。
假设 PHP 可以获取它自己的进程 ID 并运行外部命令,则应该执行ps -ef | grep pid
pid是您自己的进程 ID 并从中提取父进程 ID (PPID) 的问题。
然后对该 PPID 执行相同的操作,直到您将 cron 作为父级或 init 作为父级。
例如,这是我的进程树,你可以看到所有权链,1 -> 6386 -> 6390 -> 6408。
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 16:21 ? 00:00:00 /sbin/init
allan 6386 1 0 19:04 ? 00:00:00 gnome-terminal --geom...
allan 6390 6386 0 19:04 pts/0 00:00:00 bash
allan 6408 6390 0 19:04 pts/0 00:00:00 ps -ef
在 cron 下运行的相同进程如下所示:
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 16:21 ? 00:00:00 /sbin/init
root 5704 1 0 16:22 ? 00:00:00 /usr/sbin/cron
allan 6390 5704 0 19:04 pts/0 00:00:00 bash
allan 6408 6390 0 19:04 pts/0 00:00:00 ps -ef
这种“走上进程树”解决方案意味着您不必担心引入人为参数来指示您是否在 cron 下运行 - 您可能会忘记在交互式会话中执行此操作并进行填充。