Подтвердить что ты не робот

Получить реальный путь приложения от pid?

Как я могу получить данные процесса, такие как имя приложения и реальный путь приложения из идентификатора процесса?

Я использую Mac OS X.

4b9b3361

Ответ 1

Очень легко получить имя/местоположение процесса, если вы знаете PID, просто используйте имя proc_name или proc_pidpath. Взгляните на следующий пример, который предоставляет путь к процессу:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <libproc.h>

int main (int argc, char* argv[])
{
    pid_t pid; int ret;
    char pathbuf[PROC_PIDPATHINFO_MAXSIZE];

    if ( argc > 1 ) {
        pid = (pid_t) atoi(argv[1]);
        ret = proc_pidpath (pid, pathbuf, sizeof(pathbuf));
        if ( ret <= 0 ) {
            fprintf(stderr, "PID %d: proc_pidpath ();\n", pid);
            fprintf(stderr, "    %s\n", strerror(errno));
        } else {
            printf("proc %d: %s\n", pid, pathbuf);
        }
    }

    return 0;
}

Ответ 2

Вы можете использовать Монитор активности - http://en.wikipedia.org/wiki/Activity_Monitor

Или в приложении терминала вы можете использовать:

ps xuwww -p PID

PID - это идентификатор процесса, который вы ищете Дополнительная помощь по команде "ps", которую вы можете найти с помощью

man ps

Ответ 3

Попробуйте использовать lsof

Пример:

lsof -p 1066 -Fn | awk 'NR==2{print}' | sed "s/n\//\//"

Выход:
/Users/user/Library/Application Support/Sublime Text 2/Packages

Ответ 4

Если PID является PID "пользовательского приложения", вы можете получить NSRunningApplication приложения следующим образом:

NSRunningApplication * app = [NSRunningApplication  
    runningApplicationWithProcessIdentifier:pid
];

И чтобы напечатать путь к исполняемому файлу:

NSLog(@"Executable of app: %@", app.executableURL.path);

сам пакет приложений находится здесь

NSLog(@"Executable of app: %@", app.bundleURL.path);

Однако это не будет работать с системными или фоновыми процессами, оно ограничено пользовательскими приложениями (которые обычно видны в доке после запуска). Объект NSRunningApplication позволяет проверить, является ли приложение активным, скрывать/отображать его и делать все остальное.

Просто подумал, что я упоминаю его здесь для полноты. Если вы хотите работать с произвольными процессами, то принятый ответ, конечно, лучше.

Ответ 5

Используйте этот код, чтобы найти processinfo psn.

Затем используйте следующую функцию, чтобы получить местоположение,

OSStatus GetProcessBundleLocation (const ProcessSerialNumber * psn, местоположение FSRef *);

Ответ 6

Я хотел бы сделать лучший ssh-copy-id только в bash!! Для этого я должен знать, где sshd спросить его о его реальной конфигурации. В какой-то системе у меня есть несколько sshd, и это не мой друг. Также на некоторых macOS команда ps не показывала полный путь для sshd.

lsof -p $PPID | grep /sshd | awk '{print $9}'

этот возврат

/usr/sbin/sshd

после того, как я попрошу

sudo /usr/sbin/sshd -T | grep authorizedkeysfile

этот возврат, на некоторой системе

authorizedkeysfile .ssh/authorized_keys

поэтому мне нужно добавить .ssh/authorized_keys