如何使用正在运行的程序的PID获取实际的程序名称?

3

我正在使用 Linux。

有没有办法在给出运行程序的 PID 的情况下获取用户定义的程序名称?

我想输出程序名称,而不是进程名称。

例如:我有一个名为 stackoverflow.java 的 Java 应用程序。现在,进程名称将由系统决定,可能会有所不同,但程序名称是 stackoverflow.java。因此,只给出该运行程序的 PID,输出应该是程序名称。

有一些命令可以满足部分需求,例如:

cat /proc/"PID"/cmdline -> 这将给出创建具有给定 "PID" 的进程的命令行参数。但是,如果我们有不同编程语言的各种程序,则运行该程序的命令格式将不相同。那么,在这种情况下,如何从该命令中提取准确的程序名称?

readlink -f /proc/"PID"/exe -> 这将给出与具有给定 "PID" 的进程相关联的可执行文件名。但是,某些进程没有可执行文件。在这种情况下,它将不返回任何内容。


你最好查看/proc/PID/cmdline,并根据第一个或第二个名称编写相应的条件语句。例如,如果是Python,则取第二个名称;如果是可执行文件,则取第一个名称等。 - undefined
Stack Overflow是一个关于编程和开发问题的网站。这个问题似乎不属于编程或开发范畴,因此被认为是离题的。请参阅帮助中心中的可以在这里提问的主题。也许Super User或者Unix & Linux Stack Exchange会更适合您提问。 - undefined
1个回答

1

您可以使用ps实用程序来实现这一点。例如:

$ ps 12345
  PID TTY      STAT   TIME COMMAND
12345 pts/1    S      0:00 sleep 20

以下是如何仅请求命令的方法:

$ ps -o command 12345
COMMAND
sleep 20

所以你只需要删除那第一行:

$ ps -o command 12345 |awk 'NR>1'
sleep 20

如果你只想要没有参数的命令:

$ ps -o command 12345 |awk 'NR>1 { print $1 }'
sleep

(注意:此方法无法处理命令名称中包含空格的情况。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接