结束一个shell_exec进程PHP

时间:2019-02-04 11:28:06

标签: php apache shell-exec

现在试图弄清楚这几个小时。没有运气。

我正在尝试构建一个可以使用shell_exec运行报告(在后台运行脚本)的系统。

以下代码启动运行报告的脚本: shell_exec("php /var/www/html/lab-40/test/invoice_reminder.php");

现在我该如何结束使用PHP的脚本执行?

我已经尝试过PIDS之类的方法,但是我不知道该如何处理。感谢您的提前帮助!

编辑:如果关闭了e.g标签,我不会尝试结束该过程。

2 个答案:

答案 0 :(得分:2)

基于shell_exec帮助页面上的comment&将使流程进入后台,而echo $!将打印流程PID):

<?php

function shell_exec_background(string $command): int {
    return (int)shell_exec(
        sprintf(
            'nohup %s 1> /dev/null 2> /dev/null & echo $!',
            $command
        )
    );
}

function is_pid_running(int $pid): bool {
    exec(
        sprintf(
            'kill -0 %d 1> /dev/null 2> /dev/null',
            $pid
        ),
        $output,
        $exit_code
    );

    return $exit_code === 0;
}

function kill_pid(int $pid): bool {
    exec(
        sprintf(
            'kill -KILL %d 1> /dev/null 2> /dev/null',
            $pid
        ),
        $output,
        $exit_code
    );

    return $exit_code === 0;
}

$pid = shell_exec_background('php /var/www/html/lab-40/test/invoice_reminder.php');
var_dump($pid);
var_dump(is_pid_running($pid));
var_dump(kill_pid($pid));

答案 1 :(得分:-1)

为更好地控制子进程,请看一下PCNTL FunctionsPOSIX Functions