import concurrent.futures
import subprocess
import signal
import time
def run_continuous_command_with_bash(command):
try:
# 在独立的进程中执行命令,不等待其完成
process = subprocess.Popen(['/bin/bash', '-c', command])
print(f"Command started: '{command}'")
return process
except Exception as e:
print(f"Error executing command '{command}': {e}")
return None
# 例子:按照前后顺序依次执行五个包含;bash的持续命令
commands_to_run = [
"command_1;bash",
"command_2;bash",
"command_3;bash",
"command_4;bash",
"command_5;bash"
]
def execute_continuous_commands(commands, target_command):
processes = []
try:
with concurrent.futures.ProcessPoolExecutor() as executor:
# 提交任务
futures = [executor.submit(run_continuous_command_with_bash, command) for command in commands]
# 等待特定命令运行结束
for future in concurrent.futures.as_completed(futures):
process = future.result()
processes.append(process)
# 寻找特定命令的任务
if process.args[-1] == target_command:
# 在这里可以执行一些特定命令完成后的操作
pass
except KeyboardInterrupt:
print("Ctrl+C detected. Sending interrupt signal to all processes.")
# 发送中断信号到所有进程
for process in processes:
try:
process.send_signal(signal.SIGINT)
except Exception as e:
print(f"Error sending signal to process: {e}")
finally:
# 等待所有进程结束
for process in processes:
process.wait()
# 执行命令
target_command = "command_3;bash"
execute_continuous_commands(commands_to_run, target_command)
# 等待一段时间,以观察结果
time.sleep(10)
import subprocess
import signal
import time
def run_continuous_command_with_bash(command):
try:
# 在独立的进程中执行命令,不等待其完成
process = subprocess.Popen(['/bin/bash', '-c', command])
print(f"Command started: '{command}'")
return process
except Exception as e:
print(f"Error executing command '{command}': {e}")
return None
# 例子:按照前后顺序依次执行五个包含;bash的持续命令
commands_to_run = [
"command_1;bash",
"command_2;bash",
"command_3;bash",
"command_4;bash",
"command_5;bash"
]
def execute_continuous_commands(commands, target_command):
processes = []
try:
for command in commands:
process = run_continuous_command_with_bash(command)
processes.append(process)
# 等待特定命令运行结束
if command == target_command:
process.communicate()
except KeyboardInterrupt:
print("Ctrl+C detected. Sending interrupt signal to all processes.")
# 发送中断信号到所有进程
for process in processes:
try:
process.send_signal(signal.SIGINT)
except Exception as e:
print(f"Error sending signal to process: {e}")
finally:
# 等待所有进程结束
for process in processes:
process.wait()
# 执行命令
target_command = "command_3;bash"
execute_continuous_commands(commands_to_run, target_command)
# 等待一段时间,以观察结果
time.sleep(10)