标签: pcntl

使用套接字时,pcntl_signal 函数未被命中且 CTRL+C 不起作用

我有一个简单的 PHP 脚本,我想从终端运行它,并且能够处理信号代码。该脚本创建 TCP 服务器并处理连接。不知道为什么,但我无法让信号处理工作:

<?php
declare(ticks = 1);

// Register shutdown command.
pcntl_signal(SIGINT, function ($sig) {
  echo 'Exiting with signal: ' . $sig;
  global $sock;
  global $client;
  socket_close($sock);
  socket_close($client);
  exit(1);
});

$address = '127.0.0.1';
$port = 1234;

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($sock, $address, $port) or die('Could not bind to address.');
socket_listen($sock);

while (TRUE) {
  $client = socket_accept($sock);
  if ($client) {
    $input = socket_read($client, 1024000);
    socket_write($client, var_export($input, TRUE));
    socket_write($client, 'End of data transmission.');
    socket_close($client);
  }
  usleep(100);
}
Run Code Online (Sandbox Code Playgroud)

CTRL+C 不会终止应用程序或调用函数。 …

php pcntl

3
推荐指数
1
解决办法
1878
查看次数

如何在Apache中使用pcntl_fork()?

这是我的代码,里面index.php(只是一个例子):

$pid = pcntl_fork();
if ($pid == -1) {
  die("failed to fork");
} else if ($pid) {
  // nothing to do
} else {
  putDataIntoWebService();
  exit();
}
echo "normal page content";
Run Code Online (Sandbox Code Playgroud)

此代码段在命令行中正常工作.在Apache中exit(),父母和孩子一起杀死它们.什么是变通方法?

php apache pcntl

2
推荐指数
1
解决办法
7524
查看次数

如何检查PCNTL模块是否存在

我编写简单的需求检查脚本.它会检查所有安装的必需PHP模块.我需要检查是否安装了pcntl.但是这个模块只能在cgi环境中访问,对于Web查询是不可见的.extension_loaded('pcntl')和function_exists('pcntl_fork')都返回false.我该如何执行此检查?

php requirements pcntl

1
推荐指数
3
解决办法
5140
查看次数

在Web服务器环境中启用PHP中的PROCESS CONTROL(PCNTL)会产生什么副作用?


以下是来自http://www.php.net/manual/en/intro.pcntl.php的报价

Process Control should not be enabled within a web server environment and unexpected results 
may happen if any Process Control functions are used within a web server environment.

在我的网络服务器上启用它有什么副作用?它的威胁和安全问题是什么?

非常感谢你的帮助

php security process-control pcntl

0
推荐指数
1
解决办法
1080
查看次数

PHP:OSX命令行上的pcntl_fork()

我有一台运行OSX Yosemite的Macbook Pro.我试图pcntl_fork()在命令行上运行一个简单的PHP脚本(命令:) php pcntl.php:

<?php
    $pid = pcntl_fork();

    switch($pid) {
        case -1:
            print "Could not fork!\n";
            exit;
        case 0:
            print "In child!\n";
            break;
        default:
            print "In parent!\n";
    }
?>
Run Code Online (Sandbox Code Playgroud)

答案是这样的:

致命错误:
在第2行的/Users/grant/Desktop/test/pcntl.php中调用未定义的函数pcntl_fork()

我已经看过很多文章,告诉你如果你运行mamp如何安装pcntl,但如果你只是使用终端,你会如何安装pcntl?如果在命令行中无法做到这一点,PHP中是否有类似的功能?

php macos command-line-interface pcntl

0
推荐指数
1
解决办法
2117
查看次数