2017-01-23 6 views
1

私はRHEL 5の上だと、このように/ procを試してみました:

$echo $$ 
50040 

$ls -ld /proc/self 
lrwxrwxrwx 1 root root 64 Jan 22 15:25 /proc/self -> 22485 

私は私の現在のプロセスIDですの/ procのサブディレクトリにそれは/ proc /自己リンクを期待。しかし、$$はプロセスIDが22405ではなく50040であることを示しています。それはなぜですか?

答えて

5

lsコマンドを発行するときに表示されるPIDは、lsコマンドのPIDであり、シェルのPIDではありません。あなたはそれを行に何度も行う場合、あなたはそれが毎回異なって表示されます。

fred> ls -ld /proc/self 
lrwxrwxrwx 1 root root 0 Jan 12 13:13 /proc/self -> 5075 

fred> ls -ld /proc/self 
lrwxrwxrwx 1 root root 0 Jan 12 13:13 /proc/self -> 5076 

fred> ls -ld /proc/self 
lrwxrwxrwx 1 root root 0 Jan 12 13:13 /proc/self -> 5077 

あなたはシェルのPIDを取得したい場合は、シェルが実行されているときに/proc/selfを使用していることを確認する必要がありますそのサブプロセスのではなく、1:

cd /proc/self ; pid=$(awk '{print $1}' stat) ; cd - 

cdはそうbash内部コマンドである、あなたは/proc/selfにアクセスする時点で、あなたはまだシェルプロセス自体で実行しています)。

+0

@paxdiablo改善していただきありがとうございます。私はこのサイトではかなり新しいです。どのように/別の人の投稿を編集する必要があるかどうかについての一般的なガイドラインはありますか? – Fred

+0

フレッド、この場合、私の答えの要点はあなたのものと同じでした( 'lsはサブプロセスなので' self 'は違うでしょう)。だから私はいくつかの詳細を追加しました(基本的に、あなたの競合が正しいことを示す例、いくつかの堅い証拠で競合をサポートするのは常に良いことです)。そして、私はちょうど気違いに行き、 '$$ 'と同じ結果を得る方法を加えました。おそらく今は止めるべきだと思う。最終的には、私の意図は最高の答えを得ることであり、自分自身のための多くの(無関係な)担当者ではありません:-) – paxdiablo

+0

ツアーは最高の状態です(http://stackoverflow.com/tour): '私たちの目標は、すべての質問に答えますので、改善できる質問や回答が表示されたら編集できます。編集を使用して間違いを修正したり、書式を改善したり、投稿の意味を明確にしたりできます。 ' – paxdiablo

1

チェックアウトman proc/proc/selfは、シェルのIDではなく/procファイルシステムにアクセスするプロセスを指します(これは$$が返すもので、/proc/selfの親になります)。

関連する問題