我有一个xmms2d
进程正在运行,但两个可能的可执行文件(在不同的目录中,都在可执行路径中)可能会生成它。我怀疑其中之一已损坏,因为该程序有时可以工作,有时则不能。现在正在运行的进程可以正常运行,因此我想删除(或重命名)另一个进程。
ps ax|grep "xmms"
返回时8505 ? SLl 2:38 xmms2d -v
不带路径信息。给定 PID,我可以找到它是否是从/usr/bin/xmms2d
或运行的吗/usr/local/bin/xmms2d
?
谢谢!
答案1
尝试这个:
ls -l /proc/8505/exe
或者,如果您不想解析 的输出ls
,只需执行以下操作:
readlink /proc/8505/exe
或者
realpath /proc/8505/exe
答案2
如果您运行的是 Solaris,则建议的方式与 Linux 略有不同:
$ for i in $(pgrep bash)
do
printf "%6d %s\n" $i $(readlink /proc/$i/path/a.out)
done
577 /usr/bin/bash
11247 /usr/bin/bash
13921 /usr/bin/bash
13992 /tmp/bash
如果您想知道正在运行的进程的当前工作目录,可以使用:
pwdx $(pgrep xmms)
例如:
$ pwdx $(pgrep ksh)
2904: /home/jlliagre
2906: /home/jlliagre
3844: /tmp
答案3
我从 shell 启动鼠标垫:
mousepad &
[1] 24289
检查一下,它来自哪里:
which mousepad
/usr/bin/mousepad
以路径开始:
/usr/bin/mousepad &
通过ps查看:
ps v -C mousepad
PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND
24289 pts/3 S 0:00 3 62 85441 10964 1.0 mousepad
24292 pts/3 S 0:00 0 62 85433 10864 1.0 /usr/bin/mousepad
正如我们所看到的,没有路径调用的那个显示没有路径,并且以 PATH 开头,因此可以通过
which mousepad
就这么简单,不是吗?等待!如果我从菜单启动鼠标垫会怎样?嗯,可以使用或不使用 PATH 设置来指定它。我试过。正常启动会生成一个简单的“鼠标垫” ps v -C
。由于 ~/bin 是我的 PATH 的第一部分,我在那里创建了一个虚拟程序,瞧,该虚拟程序是从菜单启动的。
但是,如果您启动的程序会自行删除怎么办?如果路径中存在第二个程序,则不会找到已删除的程序并报告错误的程序。
这就是竞争条件。如果您知道您的程序在您调查其位置时不会自行删除或移动,ps v -C NAME
并且which NAME
应该运行良好。
答案4
继续删除这两个文件(不使用强制 -f 选项)。被删除的文件是未运行的文件!
系统可执行文件锁定将不允许您删除当前正在执行的任何文件。