基于这个答案,如何在iperf3
中做到这一点。浏览iperf3
手册页和文档,似乎-t
选项不再存在。我还可以实施哪些其他方法来在一段时间后或一段时间内不存在客户端的情况下终止服务器进程?有没有比在后台运行 bash 脚本在一定时间后杀死服务器更好/更简单的方法?
目前没有办法让 iperf3 服务器在一段时间后死亡,或者如果不存在客户端。
您发布的链接提到希望在测试后完成 iperf2 端点。 iperf3 支持 --one-off 标志,该标志导致服务器最多执行一次测试并退出。
使用 iperf2 时,-t 将在 t 秒没有流量后杀死侦听器。 它还会将服务器线程限制为 t 秒,而不考虑客户端的 -t 时间。 如果给出 -d,则 -t 仅适用于服务器流量线程,iperf 侦听器将保留。
测试后杀死侦听器的另一种选择是在服务器命令行上设置 -P 1
鲍勃
https://sourceforge.net/projects/iperf2/
解决此问题的一种方法是,如果在一段时间后没有获得连接或客户端连接超时。您可以尝试进行服务器到服务器的连接。这与 1 关闭选项相结合将关闭服务器。
使用 python2 的示例:
import subprocess
import time
import numpy as np
iperf_location = r'C:Usersiperf3.exe'
server_IP = '192.168.0.10'
client_IP = '192.168.0.11'
server_command = iperf_location + ' -s -B ' + server_IP + ' --one-off'
client_command = iperf_location + ' -c ' + server_IP + ' -B ' + client_IP
#this command does a server to server connection. This way the server will close out correctly
#in the event that the client cannot connect
fail_command = iperf_location + ' -c ' + server_IP + ' -B ' + server_IP
subprocess.Popen(server_command)
time.sleep(1)
x = subprocess.Popen(client_command, stdout=subprocess.PIPE)
speed_list = []
for item in x.stdout:
item = str(item)
#print item
if 'Mbits/sec' in item.split(' '):
if "sendern" not in item.split(' '):
if "receivern" not in item.split(' '):
x = item.split(' ').index('Mbits/sec')
speed_list.append(float(item.split(' ')[x-1]))
if len(speed_list) != 0:
avg_data_rate = np.average(speed_list)
print avg_data_rate
else:
avg_data_rate = 0
print 'Test failed. Doing server direct test to ensure iperf cleans up correctly'
subprocess.check_output(fail_command)
如果您使用-D
选项在守护程序模式下启动iperf3
iperf3 -s -D
然后您可以通过向它发送SIGHUP
信号(信号编号 1(来阻止它
pkill -HUP iperf3
或
pkill -1 iperf3