summaryrefslogtreecommitdiff
path: root/app_register_test/main_serv.py
blob: 6cd6c6ebdd241a5cf42f4e49507f97879918ddca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import multiprocessing
import threading
import os
import random
import time
import signal
import sys
import glob
from datetime import datetime

# working_directory = "/root/work/dp_telemetry_app/build/support/marsio/src/marsio/build_v474/examples"
working_directory = "/opt/tsg/dp_trace_telemetry/bin"


# 命令列表
commands = [
    "./mrtest-l2fwd-nf -a l2fw0 -s nf_0_fw -m 100",
    "./mrtest-l2fwd-nf -a l2fw1 -s nf_1_fw -m 100",
    "./mrtest-l2fwd-nf -a l2fw2 -s nf_2_fw -m 100",
    "./mrtest-l2fwd-nf -a l2fw3 -s nf_3_fw -m 100",
    "./mrtest-l2fwd-nf -a l2fw4 -s nf_4_fw -m 100",
    "./mrtest-l2fwd-nf -a l2fw5 -s nf_5_fw -m 100",
    "./mrtest-l2fwd-nf -a l2fw6 -s nf_6_fw -m 100",
    "./mrtest-l2fwd-nf -a l2fw7 -s nf_7_fw -m 100"
]

# 线程函数,随机选择并执行一个命令
def execute_command(stop_event, process_id):
    count = 0
    while not stop_event.is_set():
        command = random.choice(commands)
        # thread = threading.Thread(target=os.system, args=(command,))
        thread = threading.Thread(target=lambda: os.system(f"{command} > /dev/null 2>&1"))
        thread.daemon = True  # 使线程在主线程退出时也退出
        thread.start()
        count += 1
        print(f"Process {process_id} executed command count: {count}")
        time.sleep(random.uniform(30, 40))

# 进程函数,定期检查并杀死随机一个mrtest-l2fwd-nf进程
def kill_process(stop_event):
    while True:
        pid_output = os.popen("pidof mrtest-l2fwd-nf").read().strip()
        if pid_output:
            pids = pid_output.split()
            # pid_to_kill = random.choice(pids)
            # os.system(f"kill {pid_to_kill}")
            # print(f"Killed process with PID: {pid_to_kill}")
        elif stop_event.is_set():
            break
        time.sleep(random.uniform(2, 4))

# 打印 mrzcpd 进程使用的文件描述符个数
def print_fd_count(stop_event):
    while not stop_event.is_set():
        pid_output = os.popen("pidof mrzcpd").read().strip()
        if pid_output:
            pid = pid_output.split()[0]
            fd_count = len(glob.glob(f"/proc/{pid}/fd/*"))
            print(f"mrzcpd process with PID {pid} is using {fd_count} file descriptors")
        else:
            print("mrzcpd process not found")
        time.sleep(1) 

def signal_handler(signum, frame, stop_event, processes, start_time):
    print("Caught signal, terminating processes...")
    stop_event.set()
    end_time = datetime.now()
    elapsed_time = end_time - start_time
    hours, remainder = divmod(elapsed_time.total_seconds(), 3600)
    minutes, seconds = divmod(remainder, 60)
    print(f"Program ran for: {int(hours)}:{int(minutes)}:{int(seconds)}")
    # for process in processes:
    #     process.terminate()
    # sys.exit(0)

if __name__ == "__main__":
    os.chdir(working_directory)

    stop_event = multiprocessing.Event()
    start_time = datetime.now()

    # 创建并启动执行命令的进程
    command_processes = []
    for i in range(0, 8):
        command_process = multiprocessing.Process(target=execute_command, args=(stop_event, i if i != 4 else 3))
        command_process.start()
        command_processes.append(command_process)

    # 创建并启动杀死进程的进程
    kill_process_process_1 = multiprocessing.Process(target=kill_process,args=(stop_event,))
    kill_process_process_1.start()

    kill_process_process_2 = multiprocessing.Process(target=kill_process,args=(stop_event,))
    kill_process_process_2.start()

    # 创建并启动打印文件描述符的进程
    # fd_count_process = multiprocessing.Process(target=print_fd_count, args=(stop_event,))
    # fd_count_process.start()

    processes = [kill_process_process_1, kill_process_process_2]
    processes.extend(command_processes)

    # 设置信号处理程序来捕获 SIGINT (Ctrl-C)
    signal.signal(signal.SIGINT, lambda signum, frame: signal_handler(signum, frame, stop_event, processes, start_time))

    # 等待两个进程结束
    for process in processes:
        process.join()