URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 59320
[ Назад ]

Исходное сообщение
"ps full path"

Отправлено АрхангелГавриил , 19-Авг-05 11:42 
Спрашиваю  ps -auxww | grep test.sh
Выдается
Some_user  302  0.0  0.3  1072  648  p0  S+  11:29AM   0:00.01 bash test.sh

Очевидно, что скрипт запущен "локально" (без указания полного пути к нему при запуске)
Как нибудь можно узнать полный путь к исполняемом файлу test.sh?
PS
Прошу прощения за "неумный" вопрос


Содержание

Сообщения в этом обсуждении
"ps full path"
Отправлено allez , 22-Авг-05 10:49 
>Спрашиваю  ps -auxww | grep test.sh
>Выдается
>Some_user  302  0.0  0.3  1072  648  
>p0  S+  11:29AM   0:00.01 bash test.sh
>
>Очевидно, что скрипт запущен "локально" (без указания полного пути к нему при
>запуске)
>Как нибудь можно узнать полный путь к исполняемом файлу test.sh?
>PS
>Прошу прощения за "неумный" вопрос

Если вы работаете в Linux, то вам может помочь инвентаризация /proc, а
точнее, /proc/<PID>/environ.

Вот пример:

$ cd /home/user/tmp

$ ls
test.sh

$ bash test.sh

$ ps auxww | grep test
user   19801  0.0  0.3  2232  984 pts/0    T    14:36   0:00 bash test.sh

$ cat /proc/19801/environ
PWD=/home/user/tmp
-----------cut--------------

Переменная PWD и содержит искомое.


"ps full path"
Отправлено АрхангелГавриил , 22-Авг-05 10:55 
>Если вы работаете в Linux, то вам может помочь инвентаризация /proc, а
>точнее, /proc/<PID>/environ.
>Вот пример:
>
>$ cd /home/user/tmp
>$ ls
>test.sh
>$ bash test.sh
>$ ps auxww | grep test
>user   19801  0.0  0.3  2232  984
>pts/0    T    14:36  
>0:00 bash test.sh
>$ cat /proc/19801/environ
>PWD=/home/user/tmp
>Переменная PWD и содержит искомое.
да, но это будет работать при условии, что
а) скрипт запущен мной, а не другим пользователем
б) после запуска скрипта текущий каталог не менялся. как только я его сменю, изменится значение переменной окружения PWD
мне гораздо интересней общий случай, когда процесс запущен другим пользователем

"ps full path"
Отправлено magr , 22-Авг-05 11:04 
>мне гораздо интересней общий случай, когда процесс запущен другим пользователем

тогда используйте lsof


"ps full path"
Отправлено allez , 22-Авг-05 12:20 

>да, но это будет работать при условии, что
>а) скрипт запущен мной, а не другим пользователем
>б) после запуска скрипта текущий каталог не менялся. как только я его
>сменю, изменится значение переменной окружения PWD
>мне гораздо интересней общий случай, когда процесс запущен другим пользователем

По поводу пункта "б": не путайте текущую переменную PWD и ее значение,
указанное в /proc/$PID/environ. Можете после запуска скрипта прыгать куда
угодно - ее значение в файле не изменится. В нем находится статичный
"снимок" среды, в которой был запущен скрипт.


"ps full path"
Отправлено АрхангелГавриил , 22-Авг-05 12:45 
>
>>да, но это будет работать при условии, что
>>а) скрипт запущен мной, а не другим пользователем
>>б) после запуска скрипта текущий каталог не менялся. как только я его
>>сменю, изменится значение переменной окружения PWD
>>мне гораздо интересней общий случай, когда процесс запущен другим пользователем
>
>По поводу пункта "б": не путайте текущую переменную PWD и ее значение,
>
>указанное в /proc/$PID/environ. Можете после запуска скрипта прыгать куда
>угодно - ее значение в файле не изменится. В нем находится статичный
>
>"снимок" среды, в которой был запущен скрипт.
спасибо, понял. только куда "смотреть" в случае FreeBSD в /proc/$PID ?
environ то там нет...

"ps full path"
Отправлено Karmael , 22-Авг-05 13:42 
find / -name test.sh
не спасет ?


"ps full path"
Отправлено АрхангелГавриил , 22-Авг-05 13:52 
>find / -name test.sh
>не спасет ?
нет. условно говоря, test.sh у меня 100 штук. искать долго/лень

"ps full path"
Отправлено allez , 22-Авг-05 13:56 
>спасибо, понял. только куда "смотреть" в случае FreeBSD в /proc/$PID ?
>environ то там нет...

Так вам уже ответил magr - lsof.


$ cd /home/user/tmp

$ bash test.sh

$ ps aux | grep test
user   32216  0.0  0.3  2232  984 pts/0    T    16:19   0:00 bash test.sh

$ lsof | grep test
bash      32216 user  255r   REG    3,3      17   1901044 /home/user/tmp/test.sh


"ps full path"
Отправлено Karmael , 22-Авг-05 15:07 
есть еще приблуда pstree

"ps full path"
Отправлено allez , 23-Авг-05 11:08 
>есть еще приблуда pstree

Для поставленной задачи, увы, не подходит.

К слову сказать, почитал я "man ps" и нашел опцию "e", выводящую данные
об окружении, в котором был запущен процесс.
=========================================================================
> OUTPUT MODIFIERS
>       Switch         Description
>        ....
>       e              show environment after the command
=========================================================================

$ cd /home/user/tmp
$ bash test.sh
29773 pts/1    T      0:00 bash test.sh PWD=/home/user/tmp HOSTNAME=linuxbox

Для вывода большего количества информации следует использовать "w".

В общем, была бы документация вовремя прочитана, так и огород городить не
пришлось бы. Урок как автору темы, так и мне (нечего кидаться отвечать,
пока сам для себя ясность в вопрос не внес), да и всем остальным.

P.S. Во FreeBSD-шном ps опция "e" тоже есть.


"ps full path"
Отправлено АрхангелГавриил , 23-Авг-05 15:45 
>>есть еще приблуда pstree
>
>Для поставленной задачи, увы, не подходит.
>
>К слову сказать, почитал я "man ps" и нашел опцию "e", выводящую
>данные
>об окружении, в котором был запущен процесс.
>=========================================================================
>> OUTPUT MODIFIERS
>>       Switch         Description
>>        ....
>>       e              show environment after the command
>=========================================================================
>
>$ cd /home/user/tmp
>$ bash test.sh
>29773 pts/1    T      0:00
>bash test.sh PWD=/home/user/tmp HOSTNAME=linuxbox
>
>Для вывода большего количества информации следует использовать "w".
>
>В общем, была бы документация вовремя прочитана, так и огород городить не
>
>пришлось бы. Урок как автору темы, так и мне (нечего кидаться отвечать,
>
>пока сам для себя ясность в вопрос не внес), да и всем
>остальным.
>
>P.S. Во FreeBSD-шном ps опция "e" тоже есть.
спасибо. именно то, что надо. плохо читал ман :)


"ps full path"
Отправлено magr , 23-Авг-05 17:36 
>В общем, была бы документация вовремя прочитана, так и огород городить не
>
>пришлось бы. Урок как автору темы, так и мне (нечего кидаться отвечать,
>
>пока сам для себя ясность в вопрос не внес), да и всем
>остальным.
>
>P.S. Во FreeBSD-шном ps опция "e" тоже есть.

Дело в том, что автор темы начал рассуждать про некие общие случаи. В Солярисе, к примеру, если данная опция и есть, то называется не "e", а по-другому.
С другой стороны, сложно найти UNIX где не запускается lsof. А выбирать в конечном итоге тем, кому понадобилось; и хорошо когда путей более одного.


"ps full path"
Отправлено allez , 24-Авг-05 19:59 
>Дело в том, что автор темы начал рассуждать про некие общие случаи.
>В Солярисе, к примеру, если данная опция и есть, то называется
>не "e", а по-другому.
>С другой стороны, сложно найти UNIX где не запускается lsof. А выбирать
>в конечном итоге тем, кому понадобилось; и хорошо когда путей более
>одного.

Согласен с вами. А в Solaris (по крайней мере, в 8 и 9 версиях) у ps просто нет
аналогичной опции, поэтому, действительно, lsof - универсальное решение.