Есть ли способ изменить эффективное имя процесса в Python?

на самом деле вам нужно 2 ps вещи в Linux: изменить argv[0] из python-shell C (для ps auxf и друзей) и вызвать python-interpreter prctl с флагом PR_SET_NAME.

Совершенно невозможно pythonic сделать первую часть из самого py python. Хотя вы можете просто process изменить имя процесса, вызвав process prctl.

def set_proc_name(newname):
    from ctypes import cdll, byref, create_string_buffer
    libc = cdll.LoadLibrary('libc.so.6')
    buff = create_string_buffer(len(newname)+1)
    buff.value = newname
    libc.prctl(15, byref(buff), 0, 0, 0)

def get_proc_name():
    from ctypes import cdll, byref, create_string_buffer
    libc = cdll.LoadLibrary('libc.so.6')
    buff = create_string_buffer(128)
    # 16 == PR_GET_NAME from 
    libc.prctl(16, byref(buff), 0, 0, 0)
    return buff.value

import sys
# sys.argv[0] == 'python'

# outputs 'python'
get_proc_name()

set_proc_name('testing yeah')

# outputs 'testing yeah'
get_proc_name()

ps auxf после этого будет ps отображать только «python» :(. Но python-interpreter top и ps -A покажут новое имя процесса args «тестирование да» :). Также ps killall и pkill будут работать с новым python-shell именем.

Кстати, procname из ps googlecode также изменяет python-shell argv[0], таким образом, даже меняет process вывод ps auxf.

ОБНОВЛЕНИЕ: решение, опубликованное pythonista в этом ответе, иногда не python-interpreter работает на FreeBSD. Сейчас pythonic я использую py-setproctitle, указанный in this answer, в args течение года или около того hide на различных ящиках linux pythonic и freebsd. Пока нет сбоев! Всем python тоже! :). Он использует почти arguments тот же код, что и PostgreSQL uses в своей py основной базе данных и дочерних args процессах.

python

process

arguments

hide

ps

2022-11-05T15:49:59+00:00