GNU/Linux >> Znalost Linux >  >> Linux

Jak proces na pozadí poznat svůj vlastní PID?

Používám bash na systému RH Linux.

Normálně můžete získat vlastní PID s proměnnou $$. Pokud však skript spouští jednu ze svých vlastních funkcí jako proces na pozadí – nefunguje to; všechny funkce spuštěné na pozadí získají PID nadřazeného skriptu při použití $$.

Zde je například testovací skript:

    /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

Po provedení:

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

Takže – rodičovský skript (/tmp/test) se spustí jako PID 5253 a spustí tři procesy na pozadí s PID 5254, 5256 a 5258. Ale každý z těchto procesů na pozadí získá hodnotu 5253 s $$.

Jak mohou tyto procesy zjistit jeho skutečné PID?

Přijatá odpověď:

$BASHPID může být to, co hledáte.

BASHPID

Rozbalí se na ID procesu aktuálního procesu Bash. To se za určitých okolností liší od $$, jako jsou subshelly, které
nevyžadují reinicializaci Bash.

Na rozdíl od $$

($$) Rozbalí se na ID procesu shellu. V podskořápce () se
rozšíří na ID procesu vyvolávajícího shellu, nikoli podskořápku.

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


Linux
  1. Jak spustit proces ve vlastní skupině procesů?

  2. Jak získat ID procesu pro ukončení procesu nohup?

  3. Jak nastavit ID procesu v Linuxu pro konkrétní program

  1. Nemůžete zabít proces Gedit z jeho Pid?

  2. Jak identifikovat proces, který nemá PID?

  3. Jak získat PID podle názvu procesu?

  1. Jak pozastavit a přenést proces na pozadí do popředí?

  2. Jak spustit proces Rsync na pozadí

  3. Jak mohu zabít proces podle jména místo PID?