php中exec, shell_exec,system, passthru在执行shell时候的区别

今天在网上看到有人提问关于以上几个方法的区别与用法,所以上网查了一下


首先说一下他们的共同点,首先当然他们都是执行shell脚本的方法,其次都可以向它们传递一个参数引用来获得执行状态码。


重点是 不同点
命令名称                         是否将标准输出输出到终端           返回结果
exec                                     否                                                   shell命令输出结果的最后一行
shell_exec                          否                                                   shell命令全部的输出
system                                是                                                   shell命令输出结果的最后一行

passthru                             是                                                   NULL


以上只是我个人测试出的最明显的差别,
当然还会有一些疑问,比如他们是否都会阻塞php脚本

答案是:一般情况是的


但是如果你想非阻塞的话,也是有办法的
例如 exec("sleep 2>test.log 2>&1 &");
把shell放到后台执行,这里一定注意光是把作业放到后台是不行的,而且必须把标准输出重定向(标准错误不一定需要,但是建议习惯性这样做)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值