commit 85b430c294cc9bdcfda00cb31ab99180953faa82 Author: bmy <2583236812@qq.com> Date: Sat Jun 15 21:08:18 2024 +0800 initial commit diff --git a/btl_ctl.sh b/btl_ctl.sh new file mode 100644 index 0000000..e69de29 diff --git a/start.py b/start.py new file mode 100644 index 0000000..984e796 --- /dev/null +++ b/start.py @@ -0,0 +1,72 @@ + +import subprocess +import time +import os +import psutil +from loguru import logger + +# 定义要启动的程序和命令 +binary_command = "cd /home/evan/Workplace/project_capture/build/; ./capture" # 替换为你的二进制程序路径 +conda_envs = [ + {"env": "conda_venv", "path": "/home/evan/Workplace/project_infer/lane_server/", "script": "python lane_infer_server.py"}, + {"env": "conda_venv", "path": "/home/evan/Workplace/project_infer/yolo_server/", "script": "python yolo_infer_server.py"}, +] + +def kill_processes_by_name(process_name): + """ + 终止所有具有指定名称的进程。 + """ + for proc in psutil.process_iter(['pid', 'name', 'cmdline']): + try: + # 检查进程名是否包含给定的字符串 + if process_name.lower() in proc.info['name'].lower() or process_name.lower() in ' '.join(proc.info['cmdline']).lower(): + logger.warning(f"Killing {proc.info['name']} (PID: {proc.info['pid']})") + proc.kill() + except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): + pass + +# 启动函数,用于启动并监控一个进程 +def start_and_monitor_process(cmd, env=None): + process = subprocess.Popen(cmd, shell=True, env=env) + # while process.poll() is None: # 等待进程结束 + # time.sleep(1) # 可以根据需要调整等待时间 + # return process.returncode # 返回进程退出码 + +# 主程序 +def main(): + # 启动二进制程序 + + logger.error("hi") + + kill_processes_by_name("capture") + binary_returncode = start_and_monitor_process(binary_command) + + time.sleep(2) + + logger.info("start python script") + # 为每个 conda 环境启动 Python 脚本 + conda_procs = [] + for env_info in conda_envs: + logger.info(f"start {env_info['script']}") + # 激活 conda 环境并运行脚本(这里假设你使用的是 bash shell) + activate_cmd = f"cd {env_info['path']}; {env_info['script']}" + # activate_cmd = f"conda activate {env_info['env']}; {env_info['script']}" + # 注意:在某些系统上,可能需要使用 `conda activate` 而不是 `source activate` + # 并且可能需要设置 CONDA_PREFIX 等环境变量 + env = os.environ.copy() + # 如果有需要传递给子 shell 的环境变量,可以在这里设置 + # 例如:env["CONDA_PREFIX"] = ... + conda_proc = subprocess.Popen(["bash", "-c", activate_cmd], env=env) + conda_procs.append(conda_proc) + + # 等待所有 conda 环境中的 Python 脚本完成 + for proc in conda_procs: + proc.wait() # 等待进程结束,但不会轮询检查 + + # 打印提示信息 + print(f"Binary program exited with code {binary_returncode}") + for idx, proc in enumerate(conda_procs): + print(f"{env_info['script']} script exited with code {proc.returncode}") + +if __name__ == "__main__": + main() \ No newline at end of file