Php exec()在分叉进程中返回代码为-1,但在普通脚本中返回代码为0

Php exec()在分叉进程中返回代码为-1,但在普通脚本中返回代码为0,php,Php,我在一个脚本中使用exec(),该脚本作为守护进程运行,并使用pear类Net_服务器派生子进程 我遇到了一个奇怪的问题,返回代码(exec的第三个参数)返回为-1。当我在命令行上运行该命令时,或者在普通php脚本中使用exec时,返回代码应该是0。有人知道为什么会发生这种情况,以及如何解决它吗 我想这是环境变量的问题。可能您试图执行的事情通常在您的路径中,但不是在您生成守护进程时。提供程序的完整路径。该代码是否有可能使用了pcntl\u signal()?谢谢,这很有效。pear类设置pcnt

我在一个脚本中使用exec(),该脚本作为守护进程运行,并使用pear类Net_服务器派生子进程


我遇到了一个奇怪的问题,返回代码(exec的第三个参数)返回为-1。当我在命令行上运行该命令时,或者在普通php脚本中使用exec时,返回代码应该是0。有人知道为什么会发生这种情况,以及如何解决它吗

我想这是环境变量的问题。可能您试图执行的事情通常在您的路径中,但不是在您生成守护进程时。提供程序的完整路径。

该代码是否有可能使用了
pcntl\u signal()
?谢谢,这很有效。pear类设置pcntl_信号(SIGCHLD,SIG_IGN);你能不能再多给我一点关于“无论是什么”部分的信息?我怎么知道应该放什么?Thanks@gabo:不管是什么,最初询问者的问题是有什么东西用“something”覆盖了
SIGCHLD
的默认信号处理程序。对于他来说,解决方案是返回默认的
SIG_DFL
来完成他需要做的事情,然后将
sigchd
的信号处理程序设置回最初被覆盖的任何位置(可能是出于一个很好的原因)。没有办法知道代码里有什么。若您使用一个特定的信号处理程序而不是deafult,那个么您将知道代码中的内容,除非您使用的是未记录的第三方代码。
 pcntl_signal(SIGCHLD, SIG_DFL);
 exec('...');
 pcntl_signal(SIGCHLD, 'whatever it was');