Python: изменение имени процесса с помощью setproctitle - PullRequest
4 голосов
/ 23 августа 2010

У меня есть скрипт Python, который запускает несколько программ на C ++, каждой программе передается параметр командной строки, как показано ниже

process_path "~/test/"
process_name "test"
num_process = 10

for p in range(1, num_processes, 1):
    subprocess.Popen([process_path + process_name, str(p)], shell = False)

Возможно ли нам setproctitle переименовать каждый из этих процессов так, чтобыЯ мог бы включить параметр командной строки как часть имени процесса, если да, как бы вы это сделали?

Ответы [ 3 ]

1 голос
/ 07 октября 2010

setproctitle может изменять только свой «собственный» заголовок процесса, как я полагаю, элемент безопасности, но техника переписывания таблицы процессов - это древняя техника руткитов - настолько ясно, что это возможно.

Кроме того, setproctitle поддерживает несколько операционных систем, поэтому метод, которым вы изменяете информацию о процессе, может отличаться, но для пояснения я предполагаю, что вы используете это в Linux, и давайте посмотрим, чтоу нас есть.

Linux использует prctl (), который выглядит так, как будто вы используете prctl (PR_SET_NAME, "my_new_name"); и это работает только в вызывающем процессе.Так что не похоже, что есть «простой» способ сделать это с помощью модуля setproctitle - вы можете изменить только себя.

Лучше всего изменить код C ++, чтобы он использовал prctl.

Если вы не используете Linux, опубликуйте то, что вы используете, так как другие операционные системы предоставляют другие возможности и методы, которые значительно отличаются от ограничений prctl.

1 голос
/ 31 августа 2010

Если вы передаете kwarg executable в subprocess.Popen, вы можете использовать первый аргумент в списке аргументов:

subprocess.Popen(['some string you choose', str(p)],
                 executable=process_path+process_name, shell=False)

В документах говорится: «В Unix оно становится отображаемым именем исполняемой программы в таких утилитах, как ps.»

0 голосов
/ 09 октября 2010

Только для Windows : имя процесса обычно означает фактический исполняемый образ, который запущен (например, calc.exe).С другой стороны, заголовок процесса (это текст, который отображается на панели задач) можно легко изменить для консольных (CUI) приложений, используя команду запуска вместо непосредственного запуска приложения (укажите заголовок в качестве первого аргумента; используйте start /? для деталей):

for p in range(1, num_processes, 1):
    subprocess.Popen(['start', str(p), process_path + process_name, str(p)], shell = False)
    #                            ^ this is the title

Для приложений с графическим интерфейсом это немного сложнее, и гораздо менее вероятно, будет необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...