非阻塞PHP系统调用- tshark


non blocking php system call - tshark

我试图在接口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);

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

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

我要改变tshark输出到这个日志文件,而不是中断php脚本吗?a &足够了,如果是的话,我应该把它放在哪里?

解决方案:

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

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

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

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

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

sudo nohup tshark -i wlan0 ...