web-dev-qa-db-ja.com

Linuxのpidからのプロセス名

彼のpidからプロセス名を取得する方法は?たとえば、cat file1.txtを実行しますが、システム内のpid以降のcatコマンドとその引数を把握したいと思います。それまたは類似のものを決定する構造体はありますか?何か案が?

27
TheForbidden

このUNIXを実行する一般的な方法はありません。
各OSにはさまざまな処理方法があり、非常に難しいものもあります。 Linuxについても言及しています。 Linuxでは、情報は/ procファイルシステムにあります。
プロセスID 9999のコマンドラインを取得するには、ファイル/proc/9999/cmdline

26
Anubhab

Linuxでは、/proc/を見ることができます。詳細については、man procと入力してみてください。 /proc/$PID/cmdlineの内容は、プロセス$PIDが実行されたコマンドラインを提供します。自分を調べるための/proc/selfもあります:)

別の方法(例:Mac OS X)はlibprocを使用することです。 libproc.h を参照してください。

13
robbie_c

POSIX Cは、PIDでプロセス名を取得するための標準APIの提供をサポートしていません。

Linuxでは、LINUX Proc APIで名前を取得できます:/ proc/$ PID/cmdline。そして、コードは次のようになります。

const char* get_process_name_by_pid(const int pid)
{
    char* name = (char*)calloc(1024,sizeof(char));
    if(name){
        sprintf(name, "/proc/%d/cmdline",pid);
        FILE* f = fopen(name,"r");
        if(f){
            size_t size;
            size = fread(name, sizeof(char), 1024, f);
            if(size>0){
                if('\n'==name[size-1])
                    name[size-1]='\0';
            }
            fclose(f);
        }
    }
    return name;
}
10
QJGui

プロセスID 9000のプロセス名を取得するには、次のコマンドを使用します。

ps -p 9000 -o comm=
9
Thunder

この質問には回答しましたが、2セントを加算したいと思います。

私の場合、プロセス1111pipeを介してプロセス22222を作成するとき(少なくともこれは私が聞いたことです)、/proc/2222/cmdlineは正しいプロセス名を与えず、代わりに与えます1111_1のようなもの。正しいプロセス名を取得するには、/proc/2222/commを使用する必要があります。

2
toddwz

Linuxで以下のコマンドを使用します

ls -l /proc/[pid]/exe

プロセス/アプリケーション名を提供します

0
Vikram B