私は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であることを示しています。それはなぜですか?
私は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であることを示しています。それはなぜですか?
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
にアクセスする時点で、あなたはまだシェルプロセス自体で実行しています)。
チェックアウトman proc
。 /proc/self
は、シェルのIDではなく/proc
ファイルシステムにアクセスするプロセスを指します(これは$$
が返すもので、/proc/self
の親になります)。
@paxdiablo改善していただきありがとうございます。私はこのサイトではかなり新しいです。どのように/別の人の投稿を編集する必要があるかどうかについての一般的なガイドラインはありますか? – Fred
フレッド、この場合、私の答えの要点はあなたのものと同じでした( 'lsはサブプロセスなので' self 'は違うでしょう)。だから私はいくつかの詳細を追加しました(基本的に、あなたの競合が正しいことを示す例、いくつかの堅い証拠で競合をサポートするのは常に良いことです)。そして、私はちょうど気違いに行き、 '$$ 'と同じ結果を得る方法を加えました。おそらく今は止めるべきだと思う。最終的には、私の意図は最高の答えを得ることであり、自分自身のための多くの(無関係な)担当者ではありません:-) – paxdiablo
ツアーは最高の状態です(http://stackoverflow.com/tour): '私たちの目標は、すべての質問に答えますので、改善できる質問や回答が表示されたら編集できます。編集を使用して間違いを修正したり、書式を改善したり、投稿の意味を明確にしたりできます。 ' – paxdiablo