2014-07-26 2 views
0

Мой титул больше не Явные так не стесняйтесь, чтобы изменить его (не знаю, как назвать это)Как я могу определить Progam ПИД-

Я использую PHP скрипт, чтобы проверить, если список pid запущен, Моя проблема в том, что идентификация pid недостаточно, а какая-то другая программа может получить номер pid позже, когда мой закончится.

Итак, есть ли что-то, что я могу сделать, чтобы определить, чем pid - это хороший pid, который мне нужно проверить, а не другой.

Я думаю, что хэш /proc/<pid>/cmdline, но даже это не 100% гарантией безопасности (другая программа может быть то же программное обеспечение и те же параметры (это редко, но возможно)

если пример необходим:.

Я бег несколько экземпляра Wget

один из них PID номер 8426

несколько раз позже ...

Я проверяю, работает ли PID 8426, поэтому мой php-скрипт реагирует и не проверяет загруженный файл, но факт в том, что PID 8426 из wget завершен, и это еще одна программа, выполняющая pid 8426.

Если новый длительность программы (например: служба). Я могу долго ждать, пока мой php-скрипт проверяет загруженный файл.

+0

Просто нет надежного способа идентифицировать программы с помощью PID. –

+0

Если вы запускаете процесс, почему бы не дождаться завершения программы? какой у вас язык программирования? – Jayan

+0

Расширение комментария от @CareyGregory, причина этого заключается в том, что система может сообщать о нескольких pids для любого процесса, работающих и несуществующих pids. –

ответ

0

Вы пытались использовать объектно-ориентированную парадигму, где вы могли бы инкапсулировать конкретный номер PID в свой конкретный объект (т. Е. Конкретную программу)? Для этого вам нужно создать класс (скажем, вы даете ему произвольное имя «SOURCE»), из которого эти программы могут быть получены как объекты, принадлежащие этому классу. Это будет инкапсулировать любую информацию (например, PID), включая методы этой конкретной программы только для этой программы и, следовательно, обеспечить более безопасный путь, чем выполнение хэша. Аналогичные методы можно найти в парадигме объектно-ориентированного программирования Python.

+0

pid - это одно, но не сказать, как изолировать его от другого исполняемого файла, который позже использует тот же pid. Использование объекта для его сохранения или любого другого метода – eephyne

+0

@eephyne Присвоение класса маскирует ваш pid в одном объекте из идентичного pid другого объекта. Таким образом, исполняемый файл будет использовать другой объект, даже если pid тот же.Другими словами, как только ваш исполняемый файл работает на одном pid (объект A), он не будет работать с одним и тем же числовым pid (который будет принадлежать объекту B), поскольку исполняемый файл распознает, что два объекта (даже если pid внутри объекта идентична). Аналогичный вопрос был поднят здесь: http://stackoverflow.com/questions/21571121/how-to-tell-the-difference-between-two-different-but-identical-objects – warship

+0

Я действительно не вижу, как адаптируйте это к моему использованию. каждый раз, когда скрипт php он выполнял, он просматривал файл, чтобы получить все pids, которые он должен проверить, даже если я создаю объект в тот момент, когда он не совпадает с вашим значением. – eephyne

0

Вы можете прочитать бинарный файл, на который указывает /proc/<pid>/exe. Следующая концепция выполняется в оболочке, но, вероятно, может делать это на любом языке, включая php:

$ readlink "/proc/$$/exe" 
/bin/bash 
+0

Что делать, если это тот же исполняемый файл? Я упоминал хэширование cmdline, потому что он более точен, чем exe, но всегда существует риск – eephyne

Смежные вопросы