Uzyskać prawdziwą ścieżkę aplikacji z pid?
Jak mogę uzyskać szczegóły procesu, takie jak nazwa aplikacji i prawdziwa ścieżka aplikacji z id procesu?
Używam Mac OS X.
6 answers
Łatwo jest uzyskać nazwę / lokalizację procesu, jeśli znasz PID, po prostu użyj proc_name lub proc_pidpath. Spójrz na poniższy przykład, który zawiera ścieżkę procesu:
#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;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-16 09:16:24
Możesz użyć Monitora aktywności - http://en.wikipedia.org/wiki/Activity_Monitor
Lub w aplikacji Terminal możesz użyć:
ps xuwww -p PID
PID
jest identyfikatorem procesu, którego szukasz
Więcej pomocy w poleceniu ps znajdziesz w
man ps
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-22 08:59:48
Spróbuj użyć lsof
Przykład:
lsof -p 1066 -Fn | awk 'NR==2{print}' | sed "s/n\//\//"
Wyjście:/Users/user/Library/Application Support/Sublime Text 2/Packages
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-10 02:53:21
Jeśli PID jest PID "aplikacji użytkownika", to możesz uzyskać NSRunningApplication
aplikacji w następujący sposób:
NSRunningApplication * app = [NSRunningApplication
runningApplicationWithProcessIdentifier:pid
];
I wypisanie ścieżki pliku wykonywalnego:
NSLog(@"Executable of app: %@", app.executableURL.path);
[5]} pakiet aplikacji jest tutaj
NSLog(@"Executable of app: %@", app.bundleURL.path);
Jednak nie będzie to działać z procesami systemowymi lub w tle, jest ograniczone do aplikacji użytkownika(te zwykle widoczne w Docku po uruchomieniu). Obiekt NSRunningApplication
pozwala sprawdzić, czy aplikacja jest aktywna, ukryć/odkryć ją i zrobić wszystkie inne miłe rzeczy.
Po prostu myślałem, że wspomniałem o tym tutaj dla kompletności. Jeśli chcesz pracować z dowolnymi procesami, akceptowana odpowiedź jest oczywiście lepsza.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-08 14:44:30
Użyj tego kodu, aby znaleźć processinfo psn.
Następnie użyj następującej funkcji, aby uzyskać lokalizację,
OSStatus GetProcessBundleLocation (const ProcessSerialNumber *psn, fsref *location);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-27 09:24:08
Chciałbym zrobić lepszy SSH-copy-id tylko w bash!! W tym celu muszę wiedzieć, gdzie jest sshd, aby zapytać go o jego rzeczywistą konfigurację. W pewnym systemie mam wiele sshd i który nie jest moim przyjacielem. Również na niektórych macOS polecenie ps nie pokazuje pełnej ścieżki dla sshd.
lsof -p $PPID | grep /sshd | awk '{print $9}'
This return
/usr/sbin/sshd
Po tym jak mógłbym prosić o
sudo /usr/sbin/sshd -T | grep authorizedkeysfile
Ten zwrot, na jakimś systemie
authorizedkeysfile .ssh/authorized_keys
Więc muszę się wstawić .ssh / authorized_keysWarning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-28 22:43:16