swoole_process源码分析之kill操作

版权声明:转载请注明来源 https://blog.csdn.net/u013702678/article/details/82928824

swoole_process提供的kill操作用于向指定pid进程发送信号。

bool swoole_process::kill($pid, $signo = SIGTERM);
  • 默认的信号为SIGTERM,表示终止进程
  • $signo=0,可以检测进程是否存在,不会发送信号

下面我们看下其流程。

static PHP_METHOD(swoole_process, kill)
{
    long pid;
    long sig = SIGTERM;
    
    //解析输入参数信息,这里输入参数有进程ID和要发送的信号信息
    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|l", &pid, &sig) == FAILURE)
    {
        RETURN_FALSE;
    }

    int ret = kill((int) pid, (int) sig);//调用linux系统调用kill
    if (ret < 0)//发送失败
    {
        if (!(sig == 0 && errno == ESRCH))//不属于信号异常和进程不存在的情况
        {
            swoole_php_error(E_WARNING, "kill(%d, %d) failed. Error: %s[%d]", (int) pid, (int) sig, strerror(errno), errno);
        }
        RETURN_FALSE;
    }
    RETURN_TRUE;
}

猜你喜欢

转载自blog.csdn.net/u013702678/article/details/82928824