如何获取 *nix 进程文件名

如何获取 *nix 进程文件名

如何才能知道正在运行的进程的程序文件名?

答案1

从 shell 运行以下命令将为您提供所有正在运行的程序的最后一列中的命令、其完整路径及其调用参数:

ps -eF

这是 unix 语法,因为你没有具体说明。Linux 中也有 GNU 和 BSD 语法。 man ps了解更多信息。

答案2

请注意,以上所有命令仅对一些时间。例如,这里“ps”的输出显示了一个程序的路径,但是如果你尝试访问该路径,你会发现那里什么都没有:

  $ ./myprogram &
  $ rm myprogram
  $ ps -fe | grep myprogram
  lars     27294 29529  0 20:39 pts/1    00:00:00 ./myprogram
  $ ls myprogram
  ls: myprogram: No such file or directory

实际上ps显示的值是完全取决于启动程序的代码。 例如:

$ python -c "import os; os.execl('./myprogram', '/usr/sbin/sendmail')" &
myprogram: i am: 27914
$ ps -f -p 27914
UID        PID  PPID  C STIME TTY          TIME CMD
lars     27914 29529  0 20:44 pts/1    00:00:00 /usr/sbin/sendmail

因此,基本上,您不能依赖 ps 的输出。您可以依赖/proc/PID/exe,例如:

  $ ls -l /proc/27914/exe
  lrwxrwxrwx 1 lars lars 0 Dec  3 20:46 /proc/27914/exe -> /home/lars/tmp/myprogram

但即使在这种情况下该文件也可能不再存在。

答案3

这样的事情怎么样?

lsof-p 命令进程号| grep ‘txt’

人 lsof

-p s     This  option excludes or selects the listing of files for 
         the processes whose optional process IDentification (PID) 
         numbers are in the comma-separated set
...
FD       is the File Descriptor number of the file or:
         txt  program text (code and data);

答案4

如果您的程序位于 /usr/local/program/bin 文件系统树的深处,则在有限的终端上可能无法看到完整的路径和程序。

您可以使用:

ps -auxww

查看属于所有进程的完整无限制命令行。

出自 ps 手册页:

w               Wide output. Use this option twice for unlimited width.

相关内容