无法使用 cli_set_process_title() OS X 在 PHP 命令行脚本中设置进程标题


Cannot set process title in a PHP command line script using cli_set_process_title() OS X?

我正在尝试使用 PHP 构建一个简单的守护程序脚本,我想设置进程标题以在pstop输出中看到它。此代码为:

#!/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()并记录命令失败的事实。

我欢迎更完整的答案或其他安全的解决方法,但经过大量浪费时间,这是我能想到的最好的答案,我找不到任何其他答案。

希望这有帮助。