İşlem Kimliğinin maksimum değeri nedir?


42

İşlem Kimliğinin maksimum değeri nedir?

Ayrıca, bir İşlem Kimliğini değiştirmek mümkün müdür?

Yanıtlar:


61

Linux'ta, sisteminiz için maksimum PID değerini aşağıdakilerle bulabilirsiniz:

$ cat /proc/sys/kernel/pid_max

Bu değer aynı dosya kullanılarak da yazılabilir, ancak değer yalnızca 32 bit sistemler için teorik olarak en fazla 32768 veya 64 bit için 4194304 değerine yükseltilebilir:

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

Bu değeri 32 bit sistemlerde olduğu gibi aynı değere ayarlamak çoğu 64 bit sistemde normatif bir uygulama gibi görünmektedir, ancak bu bir gereklilik yerine konvansiyoneldir.

Kimden 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).

Ve hayır, çalışan bir işlemin PID'sini değiştiremezsiniz. İşlem başladığında çekirdek tarafından sıralı bir sayı olarak atanır ve o zamandan itibaren tanımlayıcıdır. Yenisini almak için yapabileceğiniz tek şey, kod çatalınıza yeni bir işlem ekleyip eskisini sonlandırmaktır.


ve birlikte çekirdek bit emin olabilir bu
Kova Güç

2
"PID'i değiştiremiyorum" hikayesinin ilginç bir yarı-karşıtı örneği, yardımcı iş parçacıklarından birinin bir exec () yaptığı çok okuyuculu bir programın durumudur. Tüm süreci kaplar, ancak PID'yi değiştirir (yürüten iş parçacığının TID'sine).
fche

3
32 bitlik bir makine için bir PID maksimum bir değer değildir 32768. 0 zamanlayıcı ve 1 init edilir, ve daha sonra kullanıcı işlemleri 32767 2 ile elde, 32767

2
user129258 haklıdır ve hem manuel sayfa hem de çekirdek doco ile uyumludur. Bir PID izin verilen maksimum değeri , söz talebi üzerine birden azdır o sözde dosyasında değer.
JdeBP

1
@ user129258, bu yalnızca init kullanıyorsanız geçerlidir. Her zaman doğrudan bir kabuk önyükleme olasılığı vardır, diyelim meşgul kutusu ve iş kontrolü olmadan oradan manuel olarak bir şey yapalım. Hatta bazı başlangıç ​​komut dosyalarına sahip olun ve tekrar kabuklara bırakın. Her durumda, kabuk böyle bir durumda PID 1 olacaktır.
Tim

9

Diğer cevaplar açıkladı

  • /proc/sys/kernel/pid_max Linux ve
  • FreeBSD için 99999

Ancak soru bir işletim sistemi belirtmedi. Öyleyse işte diğerleri:

  • - Solaris üzerinde, bir işlem kimliği maksimum değeri bir çekirdek ayarlanabilir bir parametredir pidmaxiçinde /etc/system- yani 30,000 varsayılan ve her yerde, 266 ve 999,999 arasında ayarlanabilir. Bunun çok max_nprocsfarklı bir fonksiyona sahip bir çekirdek ayar parametresi olan bu olmadığını unutmayın .
  • HP-UX 10'da, çekirdek ayarları , izin verilen işlem kimlikleri aralığını adlandırır process_id_minve process_id_maxbelirtir.
  • AIX'de, işlem kimlikleri bir "işlem yuvası" ve "üretim sayısı" alanı dahil olmak üzere çeşitli alanlar içerir. Mümkün olan maksimum değer 0x03FFFFFE'dir, çünkü alanlar bir tamsayı için yalnızca 26 bit kullanır ve # 0 biti, 1 # işlemi dışında her zaman sıfırdır.
  • OpenBSD'de maksimum 32766'dır.
  • NetBSD'de maksimum 30000'dür.

OpenBSD 6.5'ten itibaren, intro (2) 'ye göre, 32766'ya göre maksimum 99999'dur.
Kaiepi

4

FreeBSD'de intro(2)(link) göre PID'nin değeri 0 ile 99999 arasındadır . İşte kılavuzdan bir alıntı:

İşlem kimliği.
Sistemdeki her aktif işlem benzersiz bir işlem kimliği adı verilen negatif olmayan bir tamsayı ile tanımlanır. Bu kimliğin aralığı 0 ila 99999 arasındadır.

Kaynak kodu kendi başınıza okumak istiyorsanız, o zaman (link)PID_MAX içinde tanımlanır .sys/sys/proc.h

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.