Berapa nilai maksimum ID Proses?

42

Berapa nilai maksimum ID Proses?

Juga, apakah mungkin untuk mengubah ID Proses?

Dmitry Kodmov
sumber

Jawaban:

61

Di Linux, Anda dapat menemukan nilai PID maksimum untuk sistem Anda dengan ini:

$ cat /proc/sys/kernel/pid_max

Nilai ini juga dapat ditulis menggunakan file yang sama, namun nilainya hanya dapat diperpanjang hingga maksimum secara teoritis 32768 untuk sistem 32 bit atau 4194304 untuk 64 bit:

$ echo 32768 > /proc/sys/kernel/pid_max

Tampaknya menjadi praktik normatif pada sebagian besar sistem 64 bit untuk menetapkan nilai ini ke nilai yang sama seperti yang ditemukan pada sistem 32 bit, tetapi ini adalah dengan konvensi daripada persyaratan.

Dari man 5 proc:

/proc/sys/kernel/pid_max  
  This file (new in Linux 2.5) specifies the value at which PIDs wrap around
  (i.e., the value in this file is one greater than the maximum PID). The
  default value for this file, 32768, results in the same range of PIDs as
  on earlier kernels. On 32-bit platfroms, 32768 is the maximum value for
  pid_max. On 64-bit systems, pid_max can be set to any value up to 2^22
  (PID_MAX_LIMIT, approximately 4 million).

Dan tidak, Anda tidak dapat mengubah PID dari proses yang sedang berjalan. Itu akan ditetapkan sebagai nomor urut oleh kernel pada saat proses dimulai dan itu adalah pengenal sejak saat itu. Satu-satunya hal yang dapat Anda lakukan untuk mendapatkan yang baru adalah meminta kode Anda melakukan proses baru dan menghentikan yang lama.

Caleb
sumber
dan kita dapat yakin akan bit kernel dengan ini
Aquarius Power
2
Contoh semi-counterexample yang menarik untuk cerita "tidak dapat mengubah PID" adalah kasus dari program multithreaded, di mana salah satu thread pembantu melakukan exec (). Itu overlay seluruh proses, tetapi mengubah PID (ke TID dari thread exec'ing).
fche
3
Nilai maksimum dari PID untuk mesin 32-bit adalah 32767, bukan 32768. 0 adalah penjadwal dan 1 adalah init, dan kemudian proses pengguna mendapatkan 2 hingga 32767.
2
user129258 benar, dan sesuai dengan halaman manual dan kernel doco. Nilai maksimum yang diizinkan dari PID , seperti yang diminta oleh pertanyaan, adalah satu kurang dari nilai dalam file pseudo itu.
JdeBP
1
@ user129258, ini hanya berlaku jika Anda menggunakan init. Selalu ada kemungkinan untuk boot langsung ke shell, misalkan busybox dan lakukan hal secara manual dari sana tanpa kontrol pekerjaan. Atau bahkan memiliki beberapa skrip startup dan kembali ke shell. Bagaimanapun, shell akan menjadi PID 1 dalam kasus seperti itu.
Tim
9

Jawaban lain telah dijelaskan

  • /proc/sys/kernel/pid_max untuk Linux dan
  • 99999 untuk FreeBSD

Tetapi pertanyaannya tidak menentukan sistem operasi. Jadi, inilah beberapa yang lain:

  • Pada Solaris, nilai maksimum ID proses adalah parameter kernel yang dapat disetel - pidmaxin /etc/system- yang default menjadi 30.000 dan yang dapat diatur di mana saja antara 266 dan 999.999. Perhatikan bahwa ini bukan max_nprocs, yang merupakan parameter kernel yang bisa diubah dengan fungsi yang agak berbeda.
  • Pada HP-UX 10, kernel kernel memberi nama process_id_mindan process_id_maxmenentukan kisaran ID proses yang diizinkan.
  • Pada AIX, ID proses terdiri dari beberapa bidang, termasuk bidang "slot proses" dan "jumlah generasi". Nilai maksimum yang mungkin adalah 0x03FFFFFE, karena bidang hanya menempati 26 bit terbawah dari integer, dan bit # 0 selalu nol kecuali untuk proses # 1.
  • Pada OpenBSD maksimum adalah 32766.
  • Di NetBSD maksimum adalah 30000.
JdeBP
sumber
Pada OpenBSD 6.5, maksimum sekarang adalah 99999 menurut intro (2), bukan 32766.
Kaiepi
4

Pada FreeBSD nilai PID adalah antara 0 dan 99999 menurut intro(2)(tautan) . Berikut kutipan dari manual:

ID proses.
Setiap proses aktif dalam sistem diidentifikasi secara unik oleh integer non-negatif yang disebut ID proses. Kisaran ID ini dari 0 hingga 99999.

Jika Anda ingin membaca kode sumber sendiri maka PID_MAXdidefinisikan dalam sys/sys/proc.h(tautan) .

Mateusz Piotrowski
sumber