5.编程创建2个子进程,子进程1运行指定路径下的可执行文件(如:/home/student/welcome.out),子进程2暂停10s之后退出,父进程先用阻塞方式等待子进程1的结束,然后用非阻塞方式等待子进程2的结束,待收集到二个子进程结束的信息,父进程就返回。
时间: 2024-10-07 16:01:37 浏览: 16
student-report-card-project_2.zip_Windows编程_C/C++__Windows编程_C/C++_
在Python中,你可以使用`subprocess`模块来创建和管理子进程。首先,确保导入必要的库:
```python
import subprocess
import time
```
下面是一个示例程序,展示了如何按照你描述的方式创建两个子进程:
```python
def run_command(command_path):
# 创建子进程并运行命令
process = subprocess.Popen(command_path, shell=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
return process
# 子进程1: 执行指定路径下的可执行文件
command1 = "/home/student/welcome.out"
subprocess1 = run_command(command1)
# 子进程2: 暂停10秒再退出
# 使用Popen的communicate()方法,它会阻塞直到子进程完成,并返回其输出
# time.sleep是为了模拟暂停
time.sleep(10)
subprocess2 = run_command("exit") # 示例仅为了演示,实际上可以执行任意退出命令
# 父进程处理子进程
# 阻塞等待子进程1结束
output1, error1 = subprocess1.communicate()
print(f"子进程1结束,输出: {output1}, 错误: {error1}")
# 非阻塞等待子进程2结束
# poll()函数不会阻塞,如果子进程已经结束,会立即返回状态
if subprocess2.poll() is not None:
output2, error2 = subprocess2.communicate()
print(f"子进程2结束,输出: {output2}, 错误: {error2}")
else:
print("子进程2尚未结束")
# 父进程返回
```
阅读全文