我有一些PHP代码:
<?
$cmd="mkfifo /tmp/myfifo;";
system($cmd);
$cmd="echo 1 > /tmp/myfifo 2>&1 &";
system($cmd);
?>
在Apache服务器上。我想让第二个命令不阻止。根据系统的信息页面:
If a program is started with this function, in order for it to continue running
in the background, the output of the program must be redirected to a file or
another output stream. Failing to do so will cause PHP to hang until the execution
of the program ends.
但我不知道如何应用这种情况。我试过了
$cmd="echo 1 > /tmp/myfifo > /dev/null 2>&1 &";
但说实话,这似乎是荒谬的。
编辑:
我的最终目标是写入一个可能永远无法读取的fifo,并在5秒后超时写入。所以,如果我能设法让这个命令不阻止php执行,我可以睡5秒然后cat / tmp / myfifo&gt; / dev / null 2&gt;&amp; 1取消阻止原始写入。
任何人都可以想到一种更好的方法让我的写作无限期地挂起(无论是背景还是前景)?
答案 0 :(得分:2)
如果system()
创建的环境是bash 4.x或更高版本,我相信您可以使用“coproc”来防止它被阻止?这适用于shell脚本。 (或者,如果它没有直接在bash中执行,你可以让它调用“bash -c ...
”)
答案 1 :(得分:1)
如果您需要写入文件(并在完成之前阻止其他进程写入),那么只需使用file_put_contents。
<?php
// The new person to add to the file
$person = "John Smith\n";
// Write the contents to the file,
// using the FILE_APPEND flag to append the content to the end of the file
// and the LOCK_EX flag to prevent anyone else writing to the file at the same time
file_put_contents('/tmp/myfifo', $person, FILE_APPEND | LOCK_EX);
答案 2 :(得分:0)
您可以使用nohup
在后台启动流程:
$ nohup binary arguments
$ man nohup