如何从他的 pid 中获取进程名称?例如,我执行 cat file1.txt,但我想弄清楚 cat 命令及其参数,因为它在系统中是 pid。是否有一个结构来确定它或类似的东西?任何的想法?
7 回答
没有任何通用方法可以执行此 unix。
每个操作系统都有不同的处理方式,有些非常困难。不过,您提到了 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
创建进程时,不会给出正确的进程名称,而是给出类似. 我必须使用来获得正确的进程名称。22222
pipe
/proc/2222/cmdline
1111_1
/proc/2222/comm
在 Linux 中使用以下命令
ls -l /proc/[pid]/exe
它将给出进程/应用程序名称的名称
ps --pid <pid> -o comm h
: 此命令给出可执行文件名。例如,如果您运行脚本 name.sh,则上述命令将输出为bash
ps --ppid <pid> -o comm h
:此命令给出的输出为name