GNU/Linux >> Linux Esercitazione >  >> Linux

Come un processo in background conosce il proprio Pid?

Sto usando bash su un sistema RH Linux.

Normalmente, puoi ottenere il tuo PID con la variabile $$. Tuttavia, se uno script esegue una delle sue funzioni come processo in background, non funziona; tutte le funzioni eseguite in background riceveranno il PID dello script padre quando viene utilizzato $$.

Ad esempio, ecco uno script di prova:

    /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

Quando viene eseguito:

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

Quindi, lo script padre (/tmp/test) viene eseguito come PID 5253 e attiva tre processi in background con i PID 5254, 5256 e 5258. Ma ciascuno di questi processi in background ottiene il valore 5253 con $$.

In che modo questi processi possono scoprire il suo PID effettivo?

Risposta accettata:

$BASHPID potrebbe essere quello che stai cercando.

BASHPID

Si espande all'ID processo del processo Bash corrente. Questo è diverso da $$ in determinate circostanze, ad esempio subshell che
non richiedono la reinizializzazione di Bash.

Al contrario di $$

($$) Si espande all'ID di processo della shell. In una subshell (),
si espande all'ID processo della shell richiamante, non alla subshell.

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


Linux
  1. Non riesci a uccidere il processo Gedit dal suo Pid?

  2. Come identificare un processo che non ha Pid?

  3. Come eseguire il processo Rsync in background

  4. Come ottenere l'ID processo del processo in background?

  5. Come terminare il processo da Python usando pid?

Come trovare un nome di processo utilizzando il numero PID in Linux

Come trovare il nome del processo dal suo PID

Come trovare il PID e il PPID di un processo in Linux

Come inviare processi in background su Linux

Se conosco il numero PID di un processo, come posso ottenere il suo nome?

Come ottenere il pid del processo appena avviato