Mengapa nilai PID tidak berkelanjutan?


14

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

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

"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.


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

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.