我不明白PHP的具體情況,但是你可以走上進程樹,直到找到init或cron。
假設PHP可以獲得它自己的進程ID和運行外部命令,就應該執行ps -ef | grep pid
的無論身在何處PID是你自己的進程ID,並從中提取父進程ID(PPID)。
然後對該PPID執行相同的操作,直到您作爲父代或作爲父代的init達到cron。
例如,這是我的進程樹,你可以看到所有權鏈,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下運行 - 您可能會忘記在交互式會話中執行此操作,填滿東西。
作爲鏈接問題添加:[檢測PHP腳本是否正在交互式運行](http://stackoverflow.com/questions/11327367/detect-if-a-php-script-is-being-run -interactively有或沒有/ 11327451) – Leigh 2012-07-04 11:30:20
@Leigh:感謝您的參考! – hakre 2015-11-06 11:04:32