thực sự bạn cần 2 thứ trên linux: sửa đổi argv[0]
từ C
(ví ps auxf
và bạn bè) và gọi prctl
với PR_SET_NAME
cờ.
Hoàn toàn không có cách nào để thực hiện đoạn đầu tiên từ chính python. Mặc dù, bạn chỉ có thể thay đổi tên quy trình bằng cách gọi 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 <linux/prctl.h>
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
sẽ hiển thị chỉ 'trăn' sau đó :(. Nhưng top
và ps -A
sẽ hiển thị mới 'thử nghiệm vâng' tên quá trình :). Ngoài ra killall
và pkill
sẽ hoạt động với tên mới.
btw, tên mua từ googlecode cũng thay đổi argv[0]
, do đó, ngay cả, thay đổi đầu ra ps auxf
.
CẬP NHẬT: Giải pháp được đăng trong câu trả lời này không phát đẹp đôi khi trên FreeBSD. Tôi hiện đang sử dụng py-setproctitle đã nêu in this answer trong một năm hoặc hơn trên các hộp linux và freebsd khác nhau. Không thất bại cho đến nay! Mọi người cũng nên thế! :). Nó sử dụng hầu hết mã giống như PostgreSQLuses trong cơ sở dữ liệu và quy trình con chính của nó.
Nguồn
2009-05-28 20:39:05
xem thêm https://superuser.com/questions/427642/is-it-possible-to-set-the-process-name-with-pythonw, trong đó http: // bugs.python.org/issue5672 là tôi ntionned – anarcat