在Python中,可以使用subprocess
模块来创建和管理shell进程。subprocess
模块提供了多种函数来启动新进程,连接到它们的输入/输出/错误管道,并获取它们的返回码。
subprocess.run()
: 用于执行命令并等待其完成。subprocess.Popen()
: 用于更复杂的进程管理,如异步执行和进程间通信。当一个shell进程运行时间过长,可能会阻塞主程序的执行,导致资源浪费或系统响应变慢。
可以使用subprocess.Popen
结合信号处理来中断长时间运行的进程。以下是一个示例代码:
import subprocess
import signal
import os
import time
def run_command_with_timeout(command, timeout):
process = subprocess.Popen(command, shell=True)
start_time = time.time()
while True:
if process.poll() is not None:
return process.returncode
if time.time() - start_time > timeout:
os.kill(process.pid, signal.SIGTERM)
return -1
time.sleep(0.1)
# 示例命令
command = "sleep 10"
timeout = 5
result = run_command_with_timeout(command, timeout)
if result == -1:
print("进程被中断")
else:
print(f"进程正常结束,返回码: {result}")
subprocess.Popen
: 启动一个新的shell进程。os.kill
: 发送信号终止进程。signal.SIGTERM
是一个常用的终止信号。通过这种方式,可以有效地管理长时间运行的shell进程,确保系统的响应性和资源的有效利用。
领取专属 10元无门槛券
手把手带您无忧上云