Действительно ли возможно найти путь под управлением программы?

Один путь состоит в том, чтобы использовать cut:

 command | cut -c1-8

Это даст Вам первые 8 символов каждой строки вывода. С тех пор cut часть POSIX, это, вероятно, будет на большинстве Нельдов.

17
03.03.2011, 00:56
4 ответа

Попробуйте это:

ls -l /proc/8505/exe

Или если Вы не хотите анализировать вывод ls, просто сделайте:

readlink /proc/8505/exe

или

realpath /proc/8505/exe
22
27.01.2020, 19:47

При выполнении Соляриса путь немного отличается из Linux один предложенный:

$ for i in $(pgrep bash)
do
  printf "%6d %s\n" $i $(readlink /proc/$i/path/a.out)
done
   577 /usr/bin/bash
 11247 /usr/bin/bash
 13921 /usr/bin/bash
 13992 /tmp/bash

Если Вы хотите знать текущий рабочий каталог выполнения процессов, можно использовать:

pwdx $(pgrep xmms)

например:

$ pwdx $(pgrep ksh)
2904: /home/jlliagre
2906: /home/jlliagre
3844: /tmp
6
27.01.2020, 19:47
  • 1
    справки (удалил мой комментарий, поскольку он больше не применялся после Вашего редактирования:) –  Kjetil Jorgensen 08.04.2011, 20:53

Я запускаю коврик для мыши с оболочки:

mousepad & 
[1] 24289

проверьте, куда это прибывает из:

which mousepad 
   /usr/bin/mousepad

запустите его с пути:

/usr/bin/mousepad &

взгляд через PS:

ps v -C mousepad 
  PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
24289 pts/3    S      0:00      3    62 85441 10964  1.0 mousepad
24292 pts/3    S      0:00      0    62 85433 10864  1.0 /usr/bin/mousepad

Как мы видим, тот, вызванный без пути, отображен без пути и запущен с ПУТИ, и поэтому быть найденным

which mousepad

Простой как это, не так ли? Ожидайте! Что, если я запускаю коврик для мыши с меню? Ну, это могло бы быть указано с или не используя настройки PATH. Я попробовал. Нормальный запуск приводит к простому 'коврику для мыши' в ps v -C. С тех пор ~ / мусорное ведро первая часть моего ПУТИ, я создаю макет там, и, вуаля, макет запускается с меню.

Но что, если Вы запускаете программу, которая удаляет себя? Который не найдет удаленную программу и сообщит о неправильной, если будет секунда в пути.

Таким образом, это - состояние состязания. Если Вы знаете, что Ваши программы не удаляют себя или не перемещены при исследовании их местоположения, ps v -C NAME и which NAME должен работать вполне прилично.

-1
27.01.2020, 19:47
  • 1
    это будет всегда работать? Предположим, что у меня есть исполняемый файл в двух различных каталогах, и я работаю ./someexecutable в обоих? –  apoorv020 03.03.2011, 09:09
  • 2
    хвоста/головы нет, конечно, не, потому что оба обнаружатся как./someexecutable или/bin/bash./someexecutable –  user unknown 03.03.2011, 15:44

Идите вперед и удалите обоих файлы (без силы-f опция). Файл, который удален, является тем, который не работал!!

Системная блокировка исполняемого файла не позволит Вам удалять любой файл, который в настоящее время является объектом выполнения.

-4
27.01.2020, 19:47
  • 1
    , Ваш ответ не предоставляет реальный ответ на вопрос. –  Risto Salminen 12.12.2013, 14:27
  • 2
    Это также неправильно. Можно удалить рабочие исполняемые файлы без проблемы. Как Вы думаете пакеты такой как init, которые всегда работают, обновлены? Вы не можете изменить рабочий исполняемый файл. –  Patrick 12.12.2013, 15:58
  • 3
    Это сигнализирующим образом неправильно - не делают этого –  Michael Mrozek♦ 12.12.2013, 19:31

Теги

Похожие вопросы