彼のpidからプロセス名を取得する方法は?たとえば、cat file1.txtを実行しますが、システム内のpid以降のcatコマンドとその引数を把握したいと思います。それまたは類似のものを決定する構造体はありますか?何か案が?
このUNIXを実行する一般的な方法はありません。
各OSにはさまざまな処理方法があり、非常に難しいものもあります。 Linuxについても言及しています。 Linuxでは、情報は/ procファイルシステムにあります。
プロセスID 9999のコマンドラインを取得するには、ファイル/proc/9999/cmdline
。
Linuxでは、/proc/
を見ることができます。詳細については、man proc
と入力してみてください。 /proc/$PID/cmdline
の内容は、プロセス$PID
が実行されたコマンドラインを提供します。自分を調べるための/proc/self
もあります:)
別の方法(例:Mac OS X)はlibproc
を使用することです。 libproc.h を参照してください。
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;
}
プロセスID 9000のプロセス名を取得するには、次のコマンドを使用します。
ps -p 9000 -o comm=
この質問には回答しましたが、2セントを加算したいと思います。
私の場合、プロセス1111
がpipe
を介してプロセス22222
を作成するとき(少なくともこれは私が聞いたことです)、/proc/2222/cmdline
は正しいプロセス名を与えず、代わりに与えます1111_1
のようなもの。正しいプロセス名を取得するには、/proc/2222/comm
を使用する必要があります。
Linuxで以下のコマンドを使用します
ls -l /proc/[pid]/exe
プロセス/アプリケーション名を提供します