新建一个进程。
exec 这个必须在php.ini 里面开启
php 只能kill php 用户创建的 比如: root run a.php 然后用 www用户 kill a.php 这样是不行的。会提示权限不够。
//重启进程;
public static function RestartAction($run, $find)
{
//获取 ../..
$path = Yii::getAlias("@path");
if ($find && $run) { // 业务处理
$script = $find;
$script = trim($script);
//获取到pid
$arr = self::FindPidArray($script);
foreach ($arr as $pid => $value) {
$value = (int)$value;
$killShell = "kill -15 {$value} 2>&1";
exec($killShell);
}
$runshell = "php $path/{$run} >/dev/null 2>&1 &";
exec($runshell, $output, $_var);
Yii::info(['output: _var:', $output, $_var], 'myinfo');
$arr2 = self::FindPidArray($script);
//返回新的pid
return $arr2[0];
}
}
public static function FindPidArray($script)
{
$pShell = "/bin/ps -ef | /bin/grep \"{$script}\" | /bin/grep -v \"grep\" | awk '{print $2}'";
$output = [];
//开始执行
exec($pShell, $output);
$arr = [];
foreach ($output as $pid) {
//如果是pid就存起来
if ($pid = (int)$pid) {
$arr[] = $pid;
}
}
return array_reverse($arr);
}