gpt4 book ai didi

python - 在 python 线程中执行 os.system() 时会发生什么?

转载 作者:太空狗 更新时间:2023-10-29 12:38:58 32 4
gpt4 key购买 nike

我是 python 线程的新手。我试图了解从 python 线程调用 os.system() 时会发生什么。我知道线程确实共享文件描述符、堆、代码和全局变量。我还读到 os.system(cmd) 创建了一个新的子 shell,并在那里执行提供的 cmd。

我的问题是,当 python 线程调用 os.system(cmd) 并且 cmd 执行“./test.exe input_file.dat”时,./test.exe 的进程是否共享任何东西(即输入文件、地址空间) ,堆等)与python线程?换句话说, os.system(cmd) 是否创建了一个与调用者进程或线程无关的新进程?

下面,我提供了我编写的 python 代码。

#!/usr/bin/python

import threading
import os

semaphore = threading.Semaphore(3)

def run_command(cmd):
with semaphore:
os.system(cmd)

for i in range(3):
threading.Thread(target=run_command, args=("./test.exe input_file.dat", )).start()

最佳答案

What happens when os.system() is executed in python thread?

  • 创建了一个线程。与所有线程一样,此线程与创建它的线程共享其地址空间。

  • 该线程调用 fork() 来创建一个几乎与它自己完全一样的新子进程。只有调用 fork() 的线程存在于子进程中;不复制其他线程。子进程有一个独立于父进程的地址空间,但内存映射到所有相同的地址。

    (此子进程只存在很短的时间——除非您在调试器中采取特定步骤暂停进程,否则您不会看到它处于这种状态。Using threads in conjunction with fork() is generally inadvisable,但在这种情况下,它主要是好的。)

  • 新的子进程调用 execve() 以运行 test.exe 的新进程完全替换自身。子进程的地址空间被销毁,为新进程的镜像创建一个新地址空间。

  • 与此同时,调用 fork() 的线程现在调用 waitpid()(或者可能是 wait())来挂起它的执行直到新进程完成。一旦发生这种情况,os.system() 就会返回。

关于python - 在 python 线程中执行 os.system() 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56729460/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com