Skip to content

Commit 29cb3bb

Browse files
committed
too much updates
1 parent 414c258 commit 29cb3bb

File tree

1 file changed

+17
-5
lines changed

1 file changed

+17
-5
lines changed

granulate_utils/golang.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,31 @@
77
import struct
88
from typing import Optional
99

10-
from psutil import NoSuchProcess, Process
10+
from psutil import NoSuchProcess, Process, pids
1111

1212
from granulate_utils.linux.elf import read_elf_symbol, read_elf_va
13-
from granulate_utils.linux.process import is_kernel_thread
13+
from granulate_utils.linux.ns import get_mnt_ns_ancestor
14+
from granulate_utils.linux.process import is_kernel_thread, process_exe
1415

1516

1617
def is_golang_process(process: Process) -> bool:
17-
return not is_kernel_thread(process) and get_process_golang_version(process) is not None
18+
return not is_kernel_thread(process) and get_process_golang_version(process.create_time()) is not None
1819

1920

2021
@functools.lru_cache(maxsize=4096)
21-
def get_process_golang_version(process: Process) -> Optional[str]:
22-
elf_path = f"/proc/{process.pid}/exe"
22+
def get_process_golang_version(process_start_time: float) -> Optional[str]:
23+
process = None
24+
for pid in pids():
25+
if Process(pid).create_time() == process_start_time:
26+
process = Process(pid)
27+
28+
if process is None:
29+
raise NoSuchProcess(process_start_time)
30+
try:
31+
exe = process_exe(process)
32+
except:
33+
return None
34+
elf_path = f"/proc/{get_mnt_ns_ancestor(process).pid}/root{exe}"
2335
try:
2436
symbol_data = read_elf_symbol(elf_path, "runtime.buildVersion", 16)
2537
except FileNotFoundError:

0 commit comments

Comments
 (0)