2017-06-27 13 views
1

私はlinuxに取り組んでいます。実行中のプログラムのPIDを使用して実際のプログラム名を取得する方法は?

実行中のプログラムのPIDを指定すると、ユーザー定義のプログラム名を取得する方法はありますか?

プロセス名ではなくプログラム名を出力したいとします。

たとえば、私はという名前のJavaアプリケーションを持っています。。プロセス名はシステムによって異なりますが、プログラム名はです。stackoverflow.javaです。その出力は、実行中のプログラムのPIDだけが与えられたプログラム名でなければなりません。与えられた「PID」とそのプロセスを作成し、コマンドライン引数を与える> この -

猫の/ proc /「PID」/ cmdlineを

は次のように部分的なニーズを満たしているいくつかのコマンドがあります。しかし、さまざまなプログラミング言語でさまざまなプログラムがある場合、そのプログラムを実行するコマンドの形式は同じではありません。その場合、このコマンドから正確なプログラム名を抽出する方法は?

readlink -f/proc/"PID"/exe - >これは、与えられた "PID"を持つプロセスに関連する実行可能ファイル名を与えます。ただし、実行可能ファイルがないプロセスもあります。その場合、何も返されません。

+0

ベストプラクティスは '/ proc/PID/cmdline'を見て、最初の名前か2番目の名前に応じて条件を書いてください。 Pythonの場合は2番目のように。実行可能ファイルの場合は、最初のファイルなど。 –

+0

スタックオーバーフローは、プログラミングおよび開発に関する質問のサイトです。この質問は、プログラミングや開発に関するものではないので、話題にはならないようです。ヘルプセンターの[ここではどのトピックを参照できますか](http://stackoverflow.com/help/on-topic)を参照してください。おそらく、[スーパーユーザ](http://superuser.com/)や[Unix&Linux Stack Exchange](http://unix.stackexchange.com/)の方が良いかもしれません。 – jww

答えて

0

psユーティリティがこれを行います。例えば、

$ ps 12345 
    PID TTY  STAT TIME COMMAND 
12345 pts/1 S  0:00 sleep 20 

はここだけのコマンドを求める方法は次のとおりです。あなただけのコマンドなしにしたい場合

$ ps -o command 12345 |awk 'NR>1' 
sleep 20 

$ ps -o command 12345 
COMMAND 
sleep 20 

だからあなたは単にその最初の行を削除する必要があります引数:

$ ps -o command 12345 |awk 'NR>1 { print $1 }' 
sleep 

(注:名前にスペースが含まれているコマンドでは機能しません)

関連する問題