web-dev-qa-db-ja.com

pidからアプリケーションの実際のパスを取得しますか?

アプリケーションの名前やアプリケーションの実際のパスなどのプロセスの詳細をプロセスIDから取得するにはどうすればよいですか?

Mac OSXを使用しています。

20
RLT

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;
}
28
Alen Stojanov

アクティビティモニターを使用できます- http://en.wikipedia.org/wiki/Activity_Monitor

または、ターミナルアプリで次のものを使用できます。

ps xuwww -p PID

PIDはあなたが探しているプロセスIDです 'ps`コマンドの詳細については

man ps
19
iwg

Lsofを使用してみてください

例:

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

出力:
/Users/user/Library/Application Support/Sublime Text 2/Packages

8
hewigovens

PIDが「ユーザーアプリケーション」のPIDである場合、次のようにアプリのNSRunningApplicationを取得できます。

NSRunningApplication * app = [NSRunningApplication  
    runningApplicationWithProcessIdentifier:pid
];

そして、実行可能ファイルのパスを出力するには:

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

アプリバンドル自体はこちら

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

ただし、これはシステムまたはバックグラウンドプロセスでは機能せず、ユーザーアプリ(通常、起動後にドックに表示されるアプリ)に限定されます。 NSRunningApplicationオブジェクトを使用すると、アプリが有効かどうかを確認したり、アプリを非表示/再表示したり、その他すべての種類の優れた処理を実行したりできます。

完全を期すために、ここで言及すると思いました。任意のプロセスで作業したい場合は、もちろん、受け入れられた答えの方が優れています。

3
Mecki

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を入れなければなりません

0
bunam