実行中のプログラムのパスを見つけることができますか?

実行中のプログラムのパスを見つけることができますか?

プロセスは実行中ですが、xmms2d2つの可能な実行可能ファイル(他のディレクトリ、実行可能ファイルパスの両方)がプロセスを作成できます。時にはプログラムが動作し、時には動作しないため、そのうちの1つが破損しているようです。これで実行中のプロセスが正常に動作するので、他のプロセスを削除(または名前変更)したいと思います。

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

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

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

答え4

強制 -f オプションを使用せずに両方のファイルを削除します。削除されたファイルは実行されないファイルです!

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

関連情報