如何在没有Python中的第三个库的情况下设置流程标题



许多实现都使用第三个库,例如setproctitle。那么我们可以手动实现功能吗?

当然,这个功能可以通过Python原始方法来实现。众所周知,Python有标准库ctypes。通过使用这个库,我们可以进行系统调用。同时,其他实现方式与调用系统功能相同,以达到目的。

如下代码所示:

import ctypes
libc = ctypes.CDLL('libc.so.6')
progname = ctypes.c_char_p.in_dll(libc, '__progname_full')  # refer to the source code of glibc
with open('/proc/self/cmdline') as fp:
old_progname_len = len(fp.readline())
if old_progname_len > len(new_name):
# padding blank chars
new_name += b' ' * (old_progname_len - len(new_name))
# for `ps` command:
# Environment variables are already copied to the Python program zone.
# We can get environment variables by using `os.environ`,
# hence we can ignore both reallocation and movement.
libc.strcpy(progname, ctypes.c_char_p(new_name))
# for `top` command and `/proc/self/comm`:
buff = ctypes.create_string_buffer(len(new_name) + 1)
buff.value = new_name
libc.prctl(15, ctypes.byref(buff), 0, 0, 0)

最新更新