如何从他的pid获取进程名称? 例如,我执行cat file1.txt,但我想弄清楚cat命令及其参数,因为它在系统中的pid。是否有结构来确定它或类似的东西?有什么想法吗?
答案 0 :(得分:25)
没有任何通用的方法来执行此unix。
每个操作系统都有不同的处理方式,有些方法非常难。你提到Linux了。使用Linux,信息位于/ proc文件系统中。
要获取进程ID 9999的命令行,请阅读文件/proc/9999/cmdline
。
答案 1 :(得分:13)
在Linux上,您可以查看/proc/
。尝试输入man proc
以获取更多信息。 /proc/$PID/cmdline
的内容将为您提供运行$PID
进程的命令行。还有/proc/self
用于检查自己:)
另一种选择(例如在Mac OS X上)是使用libproc
。请参阅libproc.h。
答案 2 :(得分:10)
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;
}
答案 3 :(得分:9)
要获取进程ID的进程名称,请说9000使用此命令:
ps -p 9000 -o comm=
答案 4 :(得分:2)
虽然这个问题已得到解答,但我想加2美分。
就我而言,当流程PHP_BINARY
通过1111
创建流程22222
时(至少这是我听到的),pipe
没有提供正确的流程名称,但是而是给出/proc/2222/cmdline
之类的东西。我必须使用1111_1
来获取正确的进程名称。
答案 5 :(得分:0)
在Linux中使用以下命令
ls -l /proc/[pid]/exe
它将给出进程/应用程序名称的名称
答案 6 :(得分:0)
ps --pid <pid> -o comm h
:
此命令提供可执行文件名。例如,如果您运行脚本name.sh,则以上命令将输出显示为bash
ps --ppid <pid> -o comm h
:
此命令将输出显示为name