Как я могу получить данные процесса, такие как имя приложения и реальный путь приложения из идентификатора процесса?
Я использую Mac OS X.
Как я могу получить данные процесса, такие как имя приложения и реальный путь приложения из идентификатора процесса?
Я использую Mac OS X.
Очень легко получить имя/местоположение процесса, если вы знаете 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;
}
Вы можете использовать Монитор активности - http://en.wikipedia.org/wiki/Activity_Monitor
Или в приложении терминала вы можете использовать:
ps xuwww -p PID
PID
- это идентификатор процесса, который вы ищете
Дополнительная помощь по команде "ps", которую вы можете найти с помощью
man ps
Попробуйте использовать lsof
Пример:
lsof -p 1066 -Fn | awk 'NR==2{print}' | sed "s/n\//\//"
Выход: /Users/user/Library/Application Support/Sublime Text 2/Packages
Если PID является PID "пользовательского приложения", вы можете получить NSRunningApplication
приложения следующим образом:
NSRunningApplication * app = [NSRunningApplication
runningApplicationWithProcessIdentifier:pid
];
И чтобы напечатать путь к исполняемому файлу:
NSLog(@"Executable of app: %@", app.executableURL.path);
сам пакет приложений находится здесь
NSLog(@"Executable of app: %@", app.bundleURL.path);
Однако это не будет работать с системными или фоновыми процессами, оно ограничено пользовательскими приложениями (которые обычно видны в доке после запуска). Объект NSRunningApplication
позволяет проверить, является ли приложение активным, скрывать/отображать его и делать все остальное.
Просто подумал, что я упоминаю его здесь для полноты. Если вы хотите работать с произвольными процессами, то принятый ответ, конечно, лучше.
Используйте этот код, чтобы найти processinfo psn.
Затем используйте следующую функцию, чтобы получить местоположение,
OSStatus GetProcessBundleLocation (const ProcessSerialNumber * psn, местоположение FSRef *);
Я хотел бы сделать лучший 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