GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Proses Latar Belakang Mengetahui Pidnya Sendiri?

Saya menggunakan bash pada sistem RH Linux.

Biasanya, Anda bisa mendapatkan PID Anda sendiri dengan variabel $$. Namun, jika skrip menjalankan salah satu fungsinya sendiri sebagai proses latar belakang – itu tidak akan berhasil; semua fungsi yang berjalan di latar belakang akan mendapatkan PID dari skrip induk saat $$ digunakan.

Misalnya, berikut adalah skrip pengujian:

    /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

Saat dijalankan:

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

Jadi – skrip induk (/tmp/test) dijalankan sebagai PID 5253 dan menjalankan tiga proses latar belakang dengan PID 5254, 5256, dan 5258. Namun setiap proses latar belakang tersebut mendapatkan nilai 5253 dengan $$.

Bagaimana proses ini dapat menemukan PID sebenarnya?

Jawaban yang Diterima:

$BASHPID mungkin yang Anda cari.

BASHPID

Perluas ke ID proses dari proses Bash saat ini. Ini berbeda dari $$ dalam keadaan tertentu, seperti subkulit yang
tidak memerlukan Bash untuk diinisialisasi ulang.

Berbeda dengan $$

($$) Perluas ke ID proses shell. Dalam subkulit (), itu
diperluas ke ID proses dari shell yang memanggil, bukan subkulit.

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


Linux
  1. Bagaimana cara mendapatkan ID proses dari proses latar belakang?

  2. Bagaimana cara mendapatkan ID proses untuk mematikan proses nohup?

  3. Cara mengatur ID proses di Linux untuk program tertentu

  1. Tidak Dapat Membunuh Proses Gedit Dari Pidnya?

  2. Bagaimana cara mendapatkan PID dengan nama proses?

  3. Bagaimana saya bisa tahu proses mana yang menggunakan swap?

  1. Bagaimana Menangguhkan Dan Membawa Proses Latar Belakang Ke Latar Depan?

  2. Bagaimana menjalankan proses Rsync di latar belakang

  3. Bagaimana saya bisa mematikan proses dengan nama, bukan PID?