Нахождение команды для определенного PID в Linux из Python

Попытайтесь поместить dlls в \System32\Inetsrv каталог. Это - рабочий каталог для IIS на Windows Server.

, Если это не работает попытка, помещая dlls в каталог System32 и файлы зависимости в каталоге Inetsrv.

7
задан Evan Fosmark 17 September 2009 в 19:44
поделиться

5 ответов

ПОЖАЛУЙСТА, не используйте файловую систему / proc в производственном коде. Вместо этого используйте четко определенные интерфейсы POSIX, такие как вызовы glibc и стандартные команды оболочки! Сделайте мир Linux более стандартизированным, это действительно необходимо!

То, что вам нужно, хорошо достигается с помощью вызова команды оболочки

ps -p <YOUR PID> -o cmd h

Никакого анализа не требуется!

Не говоря уже о том, что чтение вывода команды оболочки из python не требует больше усилий чем чтение из файла в / proc . И это также делает вашу программу более переносимой!

11
ответ дан 6 December 2019 в 05:39
поделиться

Прочтите команду ps и проанализируйте ее вывод.

ps -p [PID] -o cmd 

должен это сделать

6
ответ дан 6 December 2019 в 05:39
поделиться

Посмотрите в / proc / $ PID / cmdline

8
ответ дан 6 December 2019 в 05:39
поделиться

Файловая система proc экспортирует эту (и другую) информацию. Посмотрите на символическую ссылку / proc / PID / cmd.

0
ответ дан 6 December 2019 в 05:39
поделиться

Посмотрите / proc / $ PID / cmdline , а затем os.readlink () в / proc / $ PID / exe .

] / proc / $ PID / cmdline не обязательно будет правильным, поскольку программа может изменить свой вектор аргументов или может не содержать полный путь. Три примера этого из моего текущего списка процессов:

  • avahi-daemon: chroot helper
  • qmgr -l -t fifo -u
  • / usr / sbin / postgrey --pidfile = / var / run / postgrey .pid --daemonize --inet = 127.0.0.1: 60000 --delay = 55

Первый очевиден - это недопустимый путь или имя программы. Второй - это просто исполняемый файл без имени пути. Третий выглядит нормально, но вся командная строка фактически находится в argv [0] с пробелами, разделяющими аргументы. Обычно у вас должны быть аргументы, разделенные NUL.

Все это показывает, что / proc / $ PID / cmdline (или вывод ps (1)) ненадежен.

Однако, как и / proc / $ PID / exe . Обычно это символическая ссылка на исполняемый файл, который является основным текстовым сегментом процесса. Но иногда после него стоит « (удалено) », если исполняемый файл больше не находится в файловой системе.

Кроме того, программа, которая является текстовым сегментом, не всегда то, что вам нужно. Например, / proc / $ PID / exe из этого / usr / sbin / postgrey примера выше будет / usr / bin / perl . Это будет иметь место для всех интерпретируемых скриптов (#!).

Я остановился на синтаксическом анализе / proc / $ PID / cmdline - взяв первый элемент вектора, а затем ищу в нем пробелы. , и беря все до первого пробела. Если это был исполняемый файл - я остановился на этом. В противном случае я сделал ссылку для чтения (2) на / proc / $ PID / exe и удалил все строки « (удалено) » в конце. Эта первая часть завершится ошибкой, если в имени исполняемого файла действительно есть пробелы. С этим мало что можно сделать.

Кстати. Аргумент использования ps (1) вместо / proc / $ PID / cmdline в этом случае неприменим, так как вы собираетесь вернуться к / proc / $ PID / exe . Вы будете зависеть от файловой системы / proc , так что вы можете читать ее с помощью read (2) вместо pipe (2), fork (2), execve (2), readdir (3). .., напишите (2), прочтите (2). Хотя ps и / proc / $ PID / cmdline могут быть одинаковыми с точки зрения строк кода Python, за кулисами с ps происходит гораздо больше.

5
ответ дан 6 December 2019 в 05:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: