Mengapa nilai PID tidak berkelanjutan?

14

Jika kita mengetik ps -efmaka kita mendapatkan daftar proses. Mengapa nomor PID tidak berkelanjutan?

Vasu Dev Garg
sumber

Jawaban:

16

Di Ubuntu mereka kontinu. Pada sistem operasi lain mungkin berbeda.

Kernel mengalokasikan PID dalam kisaran (RESERVED_PIDS, PID_MAX_DEFAULT). Itu melakukannya secara berurutan di setiap namespace (tugas di ruang nama yang berbeda dapat memiliki ID yang sama). Dalam hal kisaran habis, tugas pid membungkus.

( /programming/3446727/how-does-linux-determine-the-next-pid )

Pikiran meskipun ...

  • Penjadwalan kernel dapat melakukan proses sehingga mungkin muncul untuk melewati angka.
  • PID akan hilang saat tugas itu berakhir.
  • PID tidak digunakan kembali sampai PID_MAX_DEFAULT tercapai.
  • PID reserverd dilewati.

Beberapa topik tentang stackoverflow:

Dalam komentar adalah perintah untuk menguji tugas PID:

for i in {1..20}; do sh -c 'echo $$'; done
Rinzwind
sumber
"Penjadwalan kernel dapat melakukan proses sehingga mungkin terlihat melewati angka." - kernel dapat membuat proses sambil menentukan proses mana yang harus dijalankan? Sepertinya aneh.
user253751
Sangat umum bagi penjadwal untuk melakukan suatu proses. Mungkin bagian ini: lxr.free-electrons.com/source/kernel/pid.c#L125 yang menentukannya :)
Rinzwind
8

ID proses yang hilang di antara sudah mati dan PID mereka akan digunakan kembali oleh kernel dalam proses selanjutnya.

Proses mati tidak akan ditampilkan dalam tabel proses (kecuali untuk zombie), karenanya ps -eftidak akan ditampilkan.

heemayl
sumber
3

Biasanya PID kontinu tetapi beberapa proses akan mati hanya pada saat Anda menjalankan perintah ps -ef.

Juga beberapa proses mungkin hanya subproses dari proses lain yang tidak ditampilkan dalam ps -efperintah. Untuk melihat beberapa hasil yang diperluas dan Anda dapat memeriksa PID berkelanjutan gunakanpstree

pstree -p

Output sampel:

   ├─teamviewerd(3468)─┬─{teamviewerd}(3474)
│                   ├─{teamviewerd}(3475)
│                   ├─{teamviewerd}(3476)
│                   ├─{teamviewerd}(3477)
│                   ├─{teamviewerd}(3478)

sementara jika Anda menjalankan ps -efAnda hanya melihat proses induk.

$ ps -ef | grep teamviewerd
root      3468     1  0 Jul15 ?        00:07:38 /opt/teamviewer9/tv_bin/teamviewerd -f
Maythux
sumber
2

Mereka berkelanjutan. PID ditetapkan secara berurutan hingga batas maksimum tercapai. Setelah batas ini akan mulai lagi dari nol.

Jadi itu hanya bahwa PID yang hilang ps -efadalah proses mati. Perhatikan bahwa ps -efdaftar hanya menjalankan proses.

7171u
sumber