• 请不要在回答技术问题时复制粘贴 AI 生成的内容
herozzm
V2EX  ›  程序员

php shell 调用系统命令后,怎么得知这个系统命令已经执行完成或者失败?

  •  
  •   herozzm · Oct 16, 2014 · 5344 views
    This topic created in 4318 days ago, the information mentioned may be changed or developed.
    我用php调用linux系统命令 zip压缩文件,但是下达命令之后,不知道后面情况?
    10 replies    2014-10-17 12:40:24 +08:00
    akstrom
        1
    akstrom  
       Oct 16, 2014   ❤️ 1
    原型:string exec(string command [, string array [, int return_var]])
    exec()函数与system()类似,也执行给定的命令,但不输出结果,而是返回结果的最后一行。虽然它只返回命令结果的最后一行,但用第二个参数array 可以得到完整的结果,方法是把结果逐行追加到array的结尾处。如果array不是空的,在调用之前最好用unset()把它清除干净。只有指定了第二个参数时,才可以用第三个参数,用来取得命令执行的状态码。


    exec("/bin/ls -l", $res, $rc);
    herozzm
        2
    herozzm  
    OP
       Oct 16, 2014
    @akstrom 发现exec命令如果命令执行时间长,整个web server进程都会挂起,其他页面也无法打开,或者速度缓慢!
    dorentus
        3
    dorentus  
       Oct 16, 2014
    http://php.net/manual/zh/function.system.php
    看这个函数的签名:string system ( string $command [, int &$return_var ] )

    第二个可选参数 $return_var 用来接收命令完成后的状态码。*nix 系统下面,约定状态码为 0 的话代表命令执行成功,其它值代表命令执行失败。Window 系统下就不知道了。
    herozzm
        4
    herozzm  
    OP
       Oct 16, 2014
    @dorentus 恩,知道了,但是问题来了,exec命令如果命令执行时间长,整个web server进程都会挂起,其他页面也无法打开,或者速度缓慢,和解?
    herozzm
        5
    herozzm  
    OP
       Oct 16, 2014
    @dorentus system好像也是一样,都是被挂起
    jsq2627
        6
    jsq2627  
       Oct 17, 2014 via iPhone
    @herozzm 所以考虑使用队列,尽量不要直接在PHP exec
    vibbow
        7
    vibbow  
       Oct 17, 2014
    @herozzm 你是不是开了session?session是有锁的。
    Geikiy
        8
    Geikiy  
       Oct 17, 2014
    @herozzm, 进程被挂起那是因为php-fpm会有一个链接最长时间,如果比较久的话建议采用异步后台进程处理,使用nohup命令将这个命令程序放到后台作为一个子进程处理即可
    herozzm
        9
    herozzm  
    OP
       Oct 17, 2014
    @jsq2627 请明示,队列需要如何做
    @Geikiy 使用nohup命令是不是就无法得到命令执行的结果?
    jsq2627
        10
    jsq2627  
       Oct 17, 2014
    @herozzm 我之前的做法是用RabbitMQ做消息队列,Web这边把执行的消息推入队列。又另外用C写了个Worker,取消息,fork,exec。Worker用python java这些都可以写,也许更容易。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3183 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 11:49 · PVG 19:49 · LAX 04:49 · JFK 07:49
    ♥ Do have faith in what you're doing.