Спрашиваю 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 -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 и содержит искомое.
>Если вы работаете в 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
мне гораздо интересней общий случай, когда процесс запущен другим пользователем
>мне гораздо интересней общий случай, когда процесс запущен другим пользователемтогда используйте lsof
>да, но это будет работать при условии, что
>а) скрипт запущен мной, а не другим пользователем
>б) после запуска скрипта текущий каталог не менялся. как только я его
>сменю, изменится значение переменной окружения PWD
>мне гораздо интересней общий случай, когда процесс запущен другим пользователемПо поводу пункта "б": не путайте текущую переменную PWD и ее значение,
указанное в /proc/$PID/environ. Можете после запуска скрипта прыгать куда
угодно - ее значение в файле не изменится. В нем находится статичный
"снимок" среды, в которой был запущен скрипт.
>
>>да, но это будет работать при условии, что
>>а) скрипт запущен мной, а не другим пользователем
>>б) после запуска скрипта текущий каталог не менялся. как только я его
>>сменю, изменится значение переменной окружения PWD
>>мне гораздо интересней общий случай, когда процесс запущен другим пользователем
>
>По поводу пункта "б": не путайте текущую переменную PWD и ее значение,
>
>указанное в /proc/$PID/environ. Можете после запуска скрипта прыгать куда
>угодно - ее значение в файле не изменится. В нем находится статичный
>
>"снимок" среды, в которой был запущен скрипт.
спасибо, понял. только куда "смотреть" в случае FreeBSD в /proc/$PID ?
environ то там нет...
find / -name test.sh
не спасет ?
>find / -name test.sh
>не спасет ?
нет. условно говоря, test.sh у меня 100 штук. искать долго/лень
>спасибо, понял. только куда "смотреть" в случае 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
есть еще приблуда pstree
>есть еще приблуда 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" тоже есть.
>>есть еще приблуда 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" тоже есть.
спасибо. именно то, что надо. плохо читал ман :)
>В общем, была бы документация вовремя прочитана, так и огород городить не
>
>пришлось бы. Урок как автору темы, так и мне (нечего кидаться отвечать,
>
>пока сам для себя ясность в вопрос не внес), да и всем
>остальным.
>
>P.S. Во FreeBSD-шном ps опция "e" тоже есть.Дело в том, что автор темы начал рассуждать про некие общие случаи. В Солярисе, к примеру, если данная опция и есть, то называется не "e", а по-другому.
С другой стороны, сложно найти UNIX где не запускается lsof. А выбирать в конечном итоге тем, кому понадобилось; и хорошо когда путей более одного.
>Дело в том, что автор темы начал рассуждать про некие общие случаи.
>В Солярисе, к примеру, если данная опция и есть, то называется
>не "e", а по-другому.
>С другой стороны, сложно найти UNIX где не запускается lsof. А выбирать
>в конечном итоге тем, кому понадобилось; и хорошо когда путей более
>одного.Согласен с вами. А в Solaris (по крайней мере, в 8 и 9 версиях) у ps просто нет
аналогичной опции, поэтому, действительно, lsof - универсальное решение.