python2,将一个进程作为子进程挂载到另一个进程上,已知条件为两个进程的PID,不用os模块下的fork
时间: 2024-03-08 12:51:01 浏览: 92
如果不使用os模块下的fork(),可以使用subprocess模块下的Popen()方法来实现将一个进程作为子进程挂到另一个进程上。具体实现步骤如下:
```python
import subprocess
parent_pid = 5678
child_pid = 1234
# 获取父进程的进程路径
with open('/proc/{}/cmdline'.format(parent_pid), 'rb') as f:
parent_cmdline = f.read().replace('\x00', ' ')
# 获取要挂载的进程的进程路径
with open('/proc/{}/cmdline'.format(child_pid), 'rb') as f:
child_cmdline = f.read().replace('\x00', ' ')
# 组合命令行参数
cmdline = '{} --parent-pid {} --foreground'.format(child_cmdline, parent_pid)
# 执行要挂载的进程
subprocess.Popen(cmdline, shell=True)
# 等待子进程结束
subprocess.call(['kill', '-STOP', str(child_pid)])
```
在上面的代码中,我们首先使用open()方法读取父进程和要挂载的进程的进程路径。然后组合命令行参数,使用subprocess.Popen()方法执行要挂载的进程,并使用subprocess.call()方法等待子进程结束。
需要注意的是,由于在Linux系统中,进程间的通信是通过文件描述符实现的,因此在执行要挂载的进程时,需要将其设置为前台进程组。这可以通过在命令行参数中添加"--foreground"选项来实现。
阅读全文