非阻塞php系统调用 - tshark

时间:2013-05-18 15:06:46

标签: php system-calls

我正在尝试在接口wlan0上启动一个tshark进程捕获5分钟。正如在其他线程中读到的那样,我试图将输出定向到这样的文件:

$log = "sniff-".date("Y-m-d-H-i-s").".txt";
system("sudo tshark -i wlan0 -a duration:300 > /var/www/log".$log);

我期待网络服务器启动tshark流程并继续前进。在apache的错误日志中,我可以看到tshark的正常输出:

Running as user "root" and group "root". This could be dangerous
Capturing on wlan0
6 packets captured

我需要更改tshark输出到此日志文件而不中断php脚本?和&是的,如果是的话,我该把它放在哪里?

解决方案:

system("sudo tshark -i wlan0 -a duration:300 > /var/www/log".$log." &");

2 个答案:

答案 0 :(得分:1)

把&在bash cmd的末尾,它应该将它与正在运行的会话断开连接,但是您可以尝试使用PHP线程或PHP fork作为并行进程运行该进程,前提是您的服务器已安装相关设置和模块以启用此功能。

system("sudo tshark -i wlan0 -a duration:300 &> /var/www/log".$log.' &');

此外,通过添加&>作为重定向模式,它会将STDOUT和STDERR流重定向到日志文件。您看到的消息可能来自STDERR,但可能不会出现在您的日志文件中。

答案 1 :(得分:0)

当我解释日志时,尽管有警告,但该过程确实可以工作并捕获数据包。 但是当php脚本完成时你的进程终止了。尝试使用

sudo nohup tshark -i wlan0 ...