from subprocess import Popen, PIPE import os ############################################################################### # Utilities to check runtime errors ############################################################################### import resource import fcntl def get_open_fds(): fds = [] soft, hard = resource.getrlimit(resource.RLIMIT_NOFILE) for fd in range(0, soft): try: flags = fcntl.fcntl(fd, fcntl.F_GETFD) except IOError: continue fds.append(fd) return fds def get_file_names_from_file_number(fds): names = [] for fd in fds: names.append(os.readlink('/proc/self/fd/%d' % fd)) return names fds = get_open_fds() systemFileNames = get_file_names_from_file_number(fds) print(systemFileNames) ############################################################################### for i in range(1000): print(i) cmd = "python3 bouncing_cube2.py --openmp --disable-output" c = cmd.split() p = Popen(c, stdout=PIPE, stderr=PIPE) stdout, stderr = p.communicate() p.wait() fileDescriptors = get_open_fds() fileNames = get_file_names_from_file_number(fileDescriptors) count = 0 for f, fds in zip(fileNames, fileDescriptors): if f not in systemFileNames: count += 1 print(f) print("Open files:", "=" * 80) print("Total open files:", count) print("Open files:", "=" * 80)