AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 406330
Accepted
Asad Moeen
Asad Moeen
Asked: 2012-07-11 02:13:53 +0800 CST2012-07-11 02:13:53 +0800 CST 2012-07-11 02:13:53 +0800 CST

PHP / SSH2 多线程

  • 772

我基本上已经完成了将 SSH2 与 PHP 结合使用的工作。有些人可能已经知道,在使用它时,PHP 代码实际上会等待所有列出的命令在 SSH 中执行,当一切都完成后,它会返回结果。这对我正在做的工作来说很好,但我需要一些命令是多线程的。

$cmd=我的命令;echo $ssh->exec($cmd);

所以我只想让它并行运行 2 次。我用谷歌搜索了一些东西,但没有得到它。对于基本的事情,我遇到了某人发布的这种方式,但对我来说没有用。

for ($i = 0; $i < 2; $i += 1)
    {
        exec("php test_1.php $i > test.txt &");  
    //this will execute test_1.php and will leave this process executing in the background and will go to next iteration of the loop immediately without waiting the completion of the script in the test_1.php , $i  is passed as argument .
}

我试着这样说exec("echo $ssh->exec($cmd) $i > test.txt &"); 在循环中,但要么它从未进入循环,要么 echo $ssh->exec 失败。我真的不需要非常简洁的多线程。哪怕是一秒钟的延迟都会有好处,谢谢。

multi-threading
  • 2 2 个回答
  • 1160 Views

2 个回答

  • Voted
  1. Best Answer
    adaptr
    2012-07-11T02:21:35+08:002012-07-11T02:21:35+08:00

    ...除了执行系统命令与 PHP 几乎没有关系之外,是的,在没有任何进一步准备的情况下执行系统命令将导致调用者等待命令完成。

    传统上,人们使用 fork() 来做这类事情。

    • 1
  2. Asad Moeen
    2012-07-11T07:39:27+08:002012-07-11T07:39:27+08:00

    我发现这是另一个用户在 ServerFault 上发布的,但这基本上不充当多线程。我的 $cmd3 exec 命令基本上在 10 秒后自动关闭,这些命令运行了 30 秒并且不是同时运行的。

    $i=0;
    while($i < 3)
    {
    $pid = pcntl_fork();
    
    if($pid == -1)
    {
        echo "Couldn't fork process";
        exit(1);
    }
    else
    {
        if($pid)
        {
            pcntl_wait($status); 
        }
        else
        {
    
            echo $ssh->exec($cmd3);
    
        }
    }
    $i++;
    }
    
    • 0

相关问题

  • 是什么导致 Windows 上的上下文切换?

  • IIS 生成的进程是否受 CPU 限制?

  • 每个 CPU 的最大线程数

  • 是否可以限制 Linux 进程使其只能在特定机器上的特定内核上运行?

  • 多线程进程的 CPU 利用率

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve