Как получить фактическое имя программы, используя PID этой запущенной программы? [закрыто]

В зависимости от конфигурации времени компиляции mutt , у вас может быть включена функция hcache («кэш заголовков»). Если эта функция включена, mutt сможет кэшировать заголовки сообщений в папках Maildir (и IMAP), что значительно сокращает время, необходимое для открытия такой папки.

Чтобы использовать функцию hcache , добавьте строку в свой файл .muttrc :

set header_cache = "/path/to/cache_folder"

Дополнительная литература: https://dev.mutt.org/trac / wiki / MuttGuide / Caching

1
28.06.2017, 08:45
3 ответа

Попробуйте это с допустимым ,

/bin/cat /proc//comm

Это даст имя исполняемого файла.

/bin/ls -lt /proc//exe

В приведенном выше примере указан путь к исполняемому файлу.

3
27.01.2020, 23:24

Для этого не будет общего решения, потому что это не всегда возможно. Если у меня есть программа на C, blue.c, и я компилирую ее с помощью

cc blue.c -o green

, а затем запустите исполняемый файл green, не будет возможности определить, что имя источника было blue.c, за исключением судебно-медицинских мер, таких как поиск в моем каталоге. (Это утверждение верно по крайней мере для некоторых компиляторов C.)

0
27.01.2020, 23:24

Вы пытаетесь определить концепцию, которой просто не существует. Вы не найдете общего понятия «имя программы» или «имени приложения», которое выходит за рамки того, что вы можете найти в качестве имени исполняемого файла.

Имя исходного файла и , как правило, не сохраняются в исполняемом файле. Для скрипта «основным» исходным файлом является имя исполняемого файла, но скрипт также использует код из множества других мест (по крайней мере интерпретатора ). Для скомпилированной программы информация недоступна во время выполнения, если только что-то специфичное для компилятора или цепочки сборки не помещает ее туда, а в большинстве случаев этого не происходит.

Просмотр /proc/$pid/exeдает путь к исполняемому файлу. Все процессы имеют исполняемый файл¹. Исполняемый файл мог быть переименован или удален с момента запуска процесса. Это единственное универсальное понятие «имя программы».

Первый элемент /proc/$pid/cmdline— это аргумент 0, передаваемый при вызове процесса. Это имя выбирается вызывающей стороной процесса. Если вызывающая сторона не ушла со своего пути, обычно это базовое имя исполняемого файла, с частью каталога или без нее, в зависимости от того, была ли программа вызвана через поиск в PATH. Процесс может перезаписать эту часть, но некоторые программы делают это в основном (, несколько демонов делают это, чтобы отразить свой статус таким образом, который можно легко увидеть с помощьюps).

Linux также хранит имя процесса, о котором сообщает ps -o comm. Он доступен через /proc/$pid/status. Это исходное базовое имя исполняемого файла, усеченное до 16 байт.

¹ В /procесть записи, ссылка exeкоторых не читается. Это потоки ядра или зомби, а не процессы. Для всех процессов ссылка доступна для чтения (с надлежащим разрешением ), хотя она может не указывать на существующий файл, если исполняемый файл был удален.

1
27.01.2020, 23:24

Теги

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