【发布时间】:2016-05-02 10:41:20
【问题描述】:
我有这样一个命令:
php myscript.php |
curl -X POST --data-binary @- "http://localhost/webservice.php/$$/output/"
我使用| 将myscript.php 的输出发送到curl 命令。我使用$$ 来获取PID,但这会返回curl 命令的PID,而不是php 命令。
事实上,我会在我所有的 crontab 工作中使用这个命令行。我不想接收数千封邮件,而是想将所有信息发送到我的网络服务。
所以在 myscript.php 中,我调用(1 是 cronjob ID):
file_get_contents('http://localhost/webservice.php/1/' . getmypid() . '/start/');
...
file_get_contents('http://localhost/webservice.php/1/' . getmypid() . '/end/');
我尝试将 myscript.php 的输出发送到我正在创建的网络服务。
所以我向我的网络服务发送开始/结束命令。我只想念一件事:如果有警告或一些“回声”,PHP 的输出。
目标是使用 PHP 命令的 PID(我用它来识别我的 web 服务中的进程)将脚本(也可以是 bash 脚本)的输出重定向到 web 服务。
如何获取 PHP 命令的 PID?我尝试了在 Stackoverflow 中找到的 $$,但正如您所回答的,它似乎是当前的 shell PID...
提前致谢!
【问题讨论】:
-
$$不是 curl 的 PID。这是 bash 的 PID。 -
我建议您找到一种不同的机制来选择唯一的文件(目录)名称。如果您打算实际创建一个唯一命名的目录,请考虑使用
mktemp命令,然后将该名称作为参数传递给您的脚本并将其插入到 URL 中。众所周知,使用进程 ID 作为文件名是不安全的,而且对您来说也不容易工作。 -
看来您的脚本的意图是使用
$$将随机整数传递到URL,我建议传递$RANDOM。 -
@Paulpro 更准确地说,它是运行管道的 Bash shell 的 PID,或者调用了当前子 shell。
$$和$BASHPID并不总是相同的。
标签: php linux bash pipeline pid