不,您不能“分配”进程 PID;相反,您应该像“真正的”守护进程那样做:让您的脚本将自己的 PID 保存在某个文件中,然后在需要终止时从该文件中读取它。
另一种选择是使用像supervisor这样的东西,它以一种非常好的方式为你处理所有这些。
更新 - 主管配置
由于我提到了主管,我还在这里发布了一个简短的主管配置文件,应该可以完成这项工作。
[program:yourscriptname]
command=/usr/local/php5/bin/php -f /home/path/to/php_script.php
在这里查看更多配置选项。
然后你可以像这样使用它:
# supervisorctl status
显示进程状态。
# supervisorctl start yourscriptname
开始你的脚本
# supervisorctl stop yourscriptname
停止你的脚本
更新 - 真实世界的主管配置示例
首先,确保你的/etc/supervisor/supervisord.conf
.
[include]
files = /etc/supervisor/conf.d/*.conf
如果没有,只需添加这两行并
mkdir /etc/supervisor/conf.d/
然后,为要启动的每个进程创建一个配置文件:
/etc/supervisor/conf.d/script1.conf
[program:script1]
command=/usr/local/php5/bin/php -f /home/path/to/php_script.php
stdout_logfile=/var/log/script1.log
stderr_logfile=/var/log/script1-error.log
/etc/supervisor/conf.d/script2.conf
[program:script2]
command=/usr/local/php5/bin/php -f /home/path/to/php_script2.php
stdout_logfile=/var/log/script2.log
stderr_logfile=/var/log/script2-error.log
...等等,等等..为您的所有脚本。
(请注意,您不需要尾随 & 因为主管将为您处理所有守护进程;事实上,您不应该执行在主管内部自我守护进程的程序)。
然后你可以开始他们:
supervisorctl start all
或者只是一个类似的东西:
supervisorctl start script1
从 php 启动主管
当然,您可以使用上面的两个命令启动/停止主管控制的进程,即使是在脚本内部也是如此。
但是请记住,您将需要 root 权限,并且允许例如非常冒险。在服务器上以 root 身份执行命令的网页..
如果是这种情况,我建议您查看有关如何以普通用户身份运行主管的说明(我从未这样做过,但您也应该能够以 www-data 用户身份运行它......)。