Какие команды можно использовать, чтобы узнать текущий рабочий каталог (CWD) запущенного процесса? Это будут команды, которые вы можете использовать извне из процесса.
168
Какие команды можно использовать, чтобы узнать текущий рабочий каталог (CWD) запущенного процесса? Это будут команды, которые вы можете использовать извне из процесса.
Есть 3 метода, о которых я знаю:
$ pwdx <PID>
$ lsof -p <PID> | grep cwd
$ readlink -e /proc/<PID>/cwd
Скажем, у нас есть этот процесс.
$ pgrep nautilus
12136
Тогда, если мы используем pwdx
:
$ pwdx 12136
12136: /home/saml
Или вы можете использовать lsof
:
$ lsof -p 12136 | grep cwd
nautilus 12136 saml cwd DIR 253,2 32768 10354689 /home/saml
Или вы можете тыкать прямо в /proc
:
$ readlink -e /proc/12136/cwd/
/home/saml
/proc
.pwdx
работает для меня.pgrep <process-name>
Я предполагаю, что у вас есть идентификатор процесса в
pid
. Большинство методов в большинстве систем требуют, чтобы оболочка, из которой вы делаете это, работала с тем же пользователем, что и целевой процесс (или root).В Linux и Solaris и, возможно, в некоторых других версиях System V:
В Linux (кроме встроенных систем, где
readlink
нет), но не в Solaris:Вы можете использовать практически любой вариант Unix
lsof
. Помните, что если есть новая строка, она будет напечатана как\n
(неотличимая от обратной косой черты, за которой следуетn
). Если вам повезет, вы можете использовать вторую форму, которая беззвучно душит все пробелы в имени каталога.Бонус: если вам нужно заставить процесс изменить свой текущий каталог, вы можете сделать это с помощью отладчика. Это полезно, например, для перемещения долго работающей программы, которая не заботится о своем текущем каталоге, из каталога, который вы хотите удалить. Не все программы ценят изменение своего текущего каталога под ногами - например, оболочка может привести к сбою.
источник
pwdx
других Unixes?pwdx
присутствует в Solaris с 20-го века, Linux с середины 2000-х годов (имитируя Solaris, говорится на странице руководства). Нет на любом другом Unix AFAIK.pwdx
есть?Если ваша система имеет
/proc
, вы всегда можете сделать:Если вы хотите узнать CWD из процесса, отличного от того, который вас интересует, вам, очевидно, нужно заменить
$$
PID вашего процесса, представляющего интерес.источник
На основании ответа @Gilles ..
если вы знаете PID вашего процесса .. для Mac OSX и Linux используйте:
получить рабочий каталог процесса ..
источник