在单独的进程中运行函数以避免segfault


Run function in a separate process to avoid segfault

我有一个大函数,我必须调用50-100次。以前我用过类似的bash脚本:

#!/bin/bash
for i in {1..50}
do
 RET=0
 until [ ${RET} -eq 1 ]; do
  php /scripts/cli.php $i
  RET=$?
 done
done

但是我不擅长bash脚本,因为我需要用返回的值来增强逻辑,所以我尝试用这样的函数在纯php中实现它:

<?
require_once('cli.php');
for($cnt=1; $cnt<=50; $cnt++){
 $cli = cli($cnt);
}
?>

但这种方法在10-15个周期后会导致分割故障。是否可以像bash脚本中那样在单独的进程中运行函数,并清理资源以避免内存泄漏?

是的,如果您需要访问子进程stdin/stdout/stderr,或者您可以使用更简单的函数:exec()或passthru(),您可以查看proc_open。

话虽如此。。PHP不应该是segfault,您使用的一定是某种有缺陷的扩展。我会更专注于解决这个问题,而不是创造变通办法。