アプリケーションの名前やアプリケーションの実際のパスなどのプロセスの詳細をプロセスIDから取得するにはどうすればよいですか?
Mac OSXを使用しています。
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を入れなければなりません