Есть две задачки: 1) определить запущен ли определенный файл 2) определить по PID имя файла (или линки) из которого запустился процесс. Код должен работать на любой Unix OS в том числе и на Mac OS, т.е. OS без procfs.
Единственное что я нашел это вытащить имя файла из стека(он там около аргументов лежит). Но, как я понимаю, некоторые процессы могут менять эту строку. И вообще я хотел бы иметь код на платформонезависимом языке (например Java). Есть еще вариант юзать lsof, но он зачастую выдает несколько файлов с атрибутом txt.
Как решить задачу одназначно?
Как связать процесс и файл из которого его запустили
Модератор: Модераторы разделов
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: Как связать процесс и файл из которого его запустили
хм... например, есть скрипт test.sh
при его запуске сначала запускается /bin/sh, который потом выполняет инструкции.
что считать исполнимым файлом: test.sh или /bin/sh???
а потом в этом файле встречается exec и дальше начинает выполнятся, скажем, /usr/bin/perl.
что теперь считать запушеным файлом, учитывая, что при вызове exec PID не изменяется?
а если потом перл еще что-то запустит?
так что, мне кажется, данная задача вообще не имеет решения.
во всяком случае в такой постановке.
при его запуске сначала запускается /bin/sh, который потом выполняет инструкции.
что считать исполнимым файлом: test.sh или /bin/sh???
а потом в этом файле встречается exec и дальше начинает выполнятся, скажем, /usr/bin/perl.
что теперь считать запушеным файлом, учитывая, что при вызове exec PID не изменяется?
а если потом перл еще что-то запустит?
так что, мне кажется, данная задача вообще не имеет решения.
во всяком случае в такой постановке.
слава роботам!
-
YMP
- Сообщения: 2
Re: Как связать процесс и файл из которого его запустили
логично былобы выдавать тот ответ который выдает /proc/pid/exe. Он до запуска perl показывает bash а потом perl. Вот только вопросик как без procfs обойтись?
-
flook
- Сообщения: 585
- Статус: Просто flook
Re: Как связать процесс и файл из которого его запустили
Никак. Пример - мапить любой файл с птичкой PROT_EXEC и делать jump на тот код. Потом анмапить старый код - процесс тот же, cmdlime старый, а код уже другой... Гарантий никаких вообще.
В каждом из нас спит гений... и с каждым днем все крепче...