swoole_process提供的close用于关闭创建的好的管道。
bool swoole_process->close(int $which = 0);
$which
指定关闭哪一个管道,默认为0
表示同时关闭读和写,1
:关闭写,2
关闭读
下面我们看下其流程。
static PHP_METHOD(swoole_process, close)
{
long which = 0;
//解析输入参数信息,这里的输入参数就一个布尔类型,用于控制是关闭读还是关闭写
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &which) == FAILURE)
{
RETURN_FALSE;
}
swWorker *process = swoole_get_object(getThis());//获取swoole内部封装对象swWorker
if (process->pipe == 0)//如果未开启管道
{
swoole_php_fatal_error(E_WARNING, "no pipe, can not close the pipe.");
RETURN_FALSE;
}
int ret;
if (which == SW_PIPE_CLOSE_READ)//如果是关闭读
{
ret = shutdown(process->pipe, SHUT_RD);//调用shutdown关闭读,这属于半关闭
}
else if (which == SW_PIPE_CLOSE_WRITE)//如果是关闭写
{
ret = shutdown(proce