Sie werden feststellen, dass alle PIDs durch 4 teilbar sind. 4 ist daher die erste verfügbare PID nach 0 (was der Leerlaufprozess ist).
Aus dem Grund, dass das wahr ist, finden Sie in diesem MSDN - Beitrag von Raymond Chen:
Prozess- und Thread-IDs sind Vielfache von vier als Nebeneffekt der Wiederverwendung von Code. Der gleiche Code, den der Kernel zuweist, wird auch für die Zuordnung von Prozess- und Thread-IDs verwendet. Da Kernel-Handles ein Vielfaches von vier sind, gilt dies auch für Prozess- und Thread-IDs.
Beachten Sie jedoch, dass Prozess-IDs eigentlich nicht für die Verarbeitung von Werten für diese Prozesse geeignet sind. Die Zahlen werden nur mit demselben Algorithmus generiert.
Und aus dem Grund, dass Kernel-Handles immer durch vier teilbar sind ... Raymond Chen zur Rettung !
Die Verfügbarkeit der beiden unteren Bits ist in der Headerdatei ntdef.h enthalten:
// Low order two bits of a handle are ignored by the system and available // for use by application code as tag bits. The remaining // and used to store a serial number and table index. #define OBJ_HANDLE_TAGBITS 0x00000003L
(Für diejenigen, die mit binären Zahlen nicht vertraut sind: Eine positive binäre Ganzzahl mit ihren zwei niederwertigen Bits Null ist immer durch vier teilbar, genau wie eine Dezimalzahl, die mit "00" endet, immer durch 100 teilbar ist.)
Also ... eine wunderliche Antwort ist, dass die erste PID wirklich "1" ist. Es ist nur so, dass der Task-Manager ua nicht weiß, dass er in der internen Form um zwei Bits nach links verschoben ist. :)