我的目标是从PHP程序调用一个shell脚本,然后等待几秒钟向它发送一些终止键(我不能简单地杀死它,因为我想测试终止阶段的正确执行)
以下是我想要的例子:
system( "RUNMYSCRIPT.sh" ); // Launch the script and return immediately.
sleep( 10 ); // Wait.
exec( "q" ); // Send a termination key to the previous script?
答案 0 :(得分:3)
您需要使用proc_open()才能与您的流程进行通信。你的例子就是这样的:
// How to connect to the process
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w")
);
// Create connection
$process = proc_open("RUNMYSCRIPT.sh", $descriptorspec, $pipes);
if (!is_resource($process)) {
die ('Could not execute RUNMYSCRIPT');
}
// Sleep & send something to it:
sleep(10);
fwrite($pipes[0], 'q');
// You can read the output through the handle $pipes[1].
// Reading 1 byte looks like this:
$result = fread($pipes[1], 1);
// Close the connection to the process
// This most likely causes the process to stop, depending on its signal handlers
proc_close($process);
答案 1 :(得分:0)
您不能简单地将密钥事件发送到此类外部应用程序。可以使用proc_open()而不是system()来写入外部shell脚本的stdin,但大多数shell脚本直接监听击键而不是监视stdin。
你可以做的是使用信号。实际上,所有shell应用程序都会响应SIGTERM和SIGHUP等信号。使用shell脚本也可以捕获和处理这些信号。如果使用proc_open()启动shell脚本,则可以使用proc_terminate()发送SIGTERM信号。