Во-первых, я не уверен, что просто настройки argv[0]
в программе на C переносят имя, показанное в ps
. Может быть, так и есть в некотором Unixen, но я понимаю, что это не ожидается.
Во-вторых, поскольку Windows не совместима с POSIX, только несколько вещей «переносимы» между POSIX и не POSIX. Поскольку вы специально говорите «ps», я предполагаю, что POSIX является вашим приоритетом, и Windows может не работать.
Что более важно, мое понимание изменения argv[0]
заключается в том, что для внесения этих изменений требуется вызов exec
. В частности, вызов exec
имеет как путь к исполняемому файлу, так и отдельный список argv
. Выполнение вашего собственного вызова позволяет нарушить соглашение оболочки о введении имени исполняемого файла в argv[0]
.
У вас есть Управление процессами библиотеки ОС , которое дает вам прямой доступ к библиотеке ОС для этого. Вы должны рассмотреть возможность разбить ваш сценарий на две части - стартер и «настоящая работа». Стартер устанавливает среду выполнения и выполняет реальную работу с требуемыми параметрами.
В C вы заменяете свой собственный процесс другим. В Python вы заменяете старый интерпретатор Python новым, который имеет другой аргумент argv [0]. Надеюсь, это не помешает. Некоторые программы проверяют argv [0], чтобы решить, что они делают.
У вас также есть subprocess.popen , который вы можете использовать для установки желаемых аргументов и исполняемого файла. В этом случае, однако, родительский процесс должен задерживаться, чтобы собрать ребенка, когда ребенок заканчивает. Родитель может не делать ничего, кроме Popen.wait