我正在尝试使用 PHP 构建一个简单的守护程序脚本,我想设置进程标题以在ps
和top
输出中看到它。此代码为:
#!/usr/bin/php
<?php
// Daemonize
cli_set_process_title('daemonized');
$pid = pcntl_fork(); // parent gets the child PID, child gets 0
if($pid){ // 0 is false in PHP
// Only the parent will know the PID. Kids aren't self-aware
// Parent says goodbye!
print "Parent : " . getmypid() . " exiting'n";
exit();
}
print "Child : " . getmypid() . "'n";
while (true) {
// daemon stuff...
sleep(2);
}
但是我无法设置标题,当我启动脚本时,我收到以下警告:
$ ./daemonize.php
PHP Warning: cli_set_process_title(): cli_set_process_title had an error: Not initialized correctly in /Applications/MAMP/htdocs/daemonize.php on line 3
Warning: cli_set_process_title(): cli_set_process_title had an error: Not initialized correctly in /Applications/MAMP/htdocs/daemonize.php on line 3
问题出在哪里,我应该怎么做才能使其正常工作?
感谢您的关注!
这本身并不是一个真正的答案,但我不确定您仍然可以在OS X 10.10.x中使用cli-php执行此操作,而无需以超级用户或其他不太安全的黑客身份运行进程。
我尝试chmod
该过程(或者更准确地说是通过php file.php
执行的文件),chown
GID到另一个组,并使用sudo
运行脚本。所有这些选项对我来说都失败了,即使 php 进程是由属于管理员组的授权用户运行的。
我的猜测:苹果一定是出于安全原因阻止了这个功能......我想我可以想象为什么。
最后,因为我的目标是 Linux 运行时,所以我重构了我的代码,以便cli_set_process_title()
不是任务关键型的,并使用错误抑制运算符运行命令,@cli_set_proc_title()
并记录命令失败的事实。
我欢迎更完整的答案或其他安全的解决方法,但经过大量浪费时间,这是我能想到的最好的答案,我找不到任何其他答案。
希望这有帮助。