実行中のプログラムのパスを見つけることは可能ですか?


17

xmms2d実行中のプロセスがありますが、2つの実行可能ファイル(実行可能パス内の異なるディレクトリ)で生成された可能性があります。このプログラムが動作する場合と動作しない場合があるため、そのうちの1つが破損していると思われます。実行中のプロセスが機能するようになったので、もう一方を削除(または名前変更)します。

ps ax|grep "xmms"8505 ? SLl 2:38 xmms2d -vパス情報なしで戻ります。PIDを考えると、私はそれから実行されたかどうかを見つけることができます/usr/bin/xmms2d/usr/local/bin/xmms2d

ありがとう!


2
ps -C xmmsgrepを廃止する必要があります。
ユーザー不明

1
pgrepもそれを行います。
jlliagre

回答:


22

これを試して:

ls -l /proc/8505/exe

または、の出力を解析したくない場合はls、次のようにします。

readlink /proc/8505/exe

または

realpath /proc/8505/exe

6

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

(編集後に適用されなくなったため、コメントを削除しました:)
Kjetil Jorgensen

-1

シェルからマウスパッドを起動します。

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の最初の部分なので、そこにダミーを作成します。できれば、ダミーはメニューから起動します。

しかし、自分自身を削除するプログラムを起動するとどうなりますか?パスに2番目のプログラムがある場合、削除されたプログラムは検出されず、間違ったプログラムが報告されます。

それが競合状態です。あなたのプログラムが自分自身を削除しないか、その場所を調査している間に移動されていない、ということがわかっている場合ps v -C NAMEと、which NAMEかなりうまく動作するはずです。


これは常に機能しますか?2つの異なるディレクトリに実行可能ファイルがあり./someexecutable、両方で実行するとしますか?
apoorv020

いいえ、もちろん、そうではありません。なぜなら、両方が./someexecutableまたは/ bin / bash ./someexecutableとして表示されるからです
ユーザー不明

-4

先に進み、両方のファイルを削除します(強制-fオプションなし)。削除されるファイルは実行中のファイルではありません!!

システム実行可能ファイルのロックでは、現在実行中のファイルを削除することはできません。


あなたの答えは質問に対する本当の答えを提供しません。
リストサルミネン

4
それも間違っています。実行中の実行可能ファイルを問題なく削除できます。init常に実行されているなどのパッケージは、どのようにアップグレードされると思いますか?実行中の実行可能ファイルを変更することはできません。
パトリック

1
これは驚くほど間違っています-しないでください
マイケルMrozek
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.