GNU/Linux >> Linux の 問題 >  >> Linux

バックグラウンドプロセスが独自のPidを知る方法は?

RHLinuxシステムでbashを使用しています。

通常、変数$$を使用して独自のPIDを取得できます。ただし、スクリプトが独自の機能の1つをバックグラウンドプロセスとして実行する場合、それは機能しません。 $$を使用すると、バックグラウンドで実行されるすべての関数が親スクリプトのPIDを取得します。

たとえば、次のテストスクリプトがあります:

    /tmp/test:
    #!/bin/bash
    echo "I am $$"
    function proce {
      sleep 3
      echo "$1 :: $$"
    }

    for x in aa bb cc; do
      eval "proce $x &"
      echo "Started: $!"
    done

実行時:

    /tmp$ ./test
    I am 5253
    Started: 5254
    Started: 5256
    Started: 5258
    /tmp$ aa :: 5253
    bb :: 5253
    cc :: 5253

つまり、親スクリプト(/ tmp / test)はPID 5253として実行され、PID 5254、5256、および5258で3つのバックグラウンドプロセスを起動します。ただし、これらのバックグラウンドプロセスはそれぞれ、$$で値5253を取得します。

これらのプロセスはどのようにして実際のPIDを検出できますか?

承認された回答:

$BASHPID あなたが探しているものかもしれません。

BASHPID

現在のBashプロセスのプロセスIDに展開されます。これは、
Bashの再初期化を必要としないサブシェルなどの特定の状況では$$とは異なります。

$$とは対照的に

($$)シェルのプロセスIDに展開されます。 ()サブシェルでは、
は、サブシェルではなく、呼び出し元のシェルのプロセスIDに展開されます。

http://www.gnu.org/software/bash/manual/bashref.html#Bash-Variables


Linux
  1. PID ではなく名前でプロセスを強制終了するにはどうすればよいですか?

  2. バックグラウンドプロセスのプロセスIDを取得するには?

  3. Linuxでのpidからのプロセス名

  1. pidを使用してPythonからプロセスを終了するには?

  2. スワップを使用しているプロセスを知るにはどうすればよいですか?

  3. 開始したばかりのプロセスのpidを取得する方法

  1. PidからGeditプロセスを強制終了できませんか?

  2. バックグラウンドプロセスを一時停止してフォアグラウンドにする方法は?

  3. Rsync プロセスをバックグラウンドで実行する方法