【问题标题】:How to give a name to a command inside shell_exec()?如何为 shell_exec() 中的命令命名?
【发布时间】:2021-02-03 12:00:03
【问题描述】:

我正在使用 shell_exec() 的 Laravel 框架中工作。我正在创建命令字符串,如下例所示。

 $cmd = "php artisan serve:setup";
 $resp = shell_exec($cmd);
 

如何为上述命令命名?它在系统监视器中仅显示为“php”;我有多个这样的命令。我需要访问该命令的PID 以及该命令的状态。

命令运行成功,在系统监视器中显示进程名称为“PHP”。

我需要来自 PHP 的带有 exec()shell_exec() 的进程名称。

我试过这样:

 $cmd = "bash -c exec ServerCPP -a cd $path && php artisan serve:setup 2>&1";
 $resp = shell_exec($cmd);
 dd($resp);

它给出了错误:“无法打开输入文件:artisan。”

【问题讨论】:

  • 这能回答你的问题吗? Start a process with a name
  • FTR:这与 PHP 无关,仅依赖于 OS 工具来更改进程标题。
  • @Peter,我正在使用 php 函数来运行此命令,它来自代码。
  • 在命令末尾添加&& echo $! 。这将在最后一行输出 pid。您可能需要 trim() 最后一行。

标签: php shell


【解决方案1】:

您的最后一次尝试需要更正:

  • cd 首先引用路径,以防$path 变量包含空格
  • bash -c 执行的命令的引号
  • exec -a ServerCPP 如果你想给你的进程命名ServerCPP
$cmd = "cd '$path' && bash -c 'exec -a ServerCPP php artisan serve:setup' 2>&1";
$resp = shell_exec($cmd);
dd($resp);

【讨论】:

    【解决方案2】:

    最好的办法是创建一个命令。

    php artisan make:command ServeSetup
    

    生成文件后,将命令的名称设置为app/Console/Commands

    protected $signature = 'serve:setup';
    

    希望这个helps

    【讨论】:

    • 我想根据我想在 shell_exec() 中运行的 $cmd 中的内容来命名它。你告诉我的答案我已经知道了。
    猜你喜欢
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多