如何从进程ID获取应用程序名称和应用程序真实路径等进程详细信息?
我使用的是 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
是你要找的进程id
有关“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
对象允许检查应用程序是否处于活动状态、隐藏/取消隐藏它以及执行所有其他类型的简洁操作。
我只是想在这里提到它是为了完整性。如果您想使用任意进程,那么接受的答案当然更好。
我想只在 bash 中制作一个更好的 ssh-copy-id! 为此,我必须知道 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