如何才能知道正在运行的进程的程序文件名?
答案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.