【閒聊】Unix 上的PID會大於65535嗎?



贊助商連結


cedric2000
2003-09-14, 09:59 PM
如題
其實之前小弟自己的觀念都是PID(Process ID)應該是在1~655355之間
但是前幾天公司聽朋友說PID>99999會造成某些問題
所以想請問一下各位先進
是不是我的觀念一直都是錯誤的呢
Thanks.

贊助商連結


repsol
2003-10-01, 01:47 PM
FreeBSD default 支援到最大的 UID 是 32000

man page 裡邊有提到
man adduser

uid Automatically generated or your choice, must be less than 32000.

adduser 的 source 有這麼一行

$uid_end = 32000; # max. uid 


另外

solaris default 支援到最大的 UID 是 2147483647

man page 有提到


-u uid
The UID of the new user. This UID must be a non-
negative decimal integer below MAXUID as defined in
<sys/param.h>. The UID defaults to the next available
(unique) number above the highest number currently
assigned. For example, if UIDs 100, 105, and 200 are
assigned, the next default UID number will be 201.
(UIDs from 0-99 are reserved for possible use in
future applications.)


看看 /usr/include/sys/param.h 這支

裡面定義了
#define MAXUID 2147483647 /* max user id */


太大的 UID 會造成什麼問題?
不妨提出來大家討論討論。

cedric2000
2003-10-01, 03:59 PM
這個問題我們後來找到原因了
證實的確PID是有可能會>99999
一般照理來說PID是會被reuse的
所以我們不常看到這麼大的PID
出狀況的是客戶的AIX,因為上面某個AP產生了一堆zombie
把PID用了一堆

至於會有甚麼問題,對系統本身應該是還好
但是對一些上面的ap如果沒考慮到這點的話就有危險
比如說用regular expression去切的時候就有可能出錯....

repsol
2003-10-01, 06:08 PM
sorry
我答非所問...我把PID看成UID了

如果PID>99999,大部分的情形就是你所說的那樣
有些程式 run 到 zombie,佔住了PID number,所以沒有reuse
也很有可能 parent process 沒有正常的收拾掉已經工作完成(或是工作不正常)child process
,釋放 PID number,來提供系統reuse 。

有時候,這些zombie process太多會拖垮系統亦或是大大的降低系統的效能。
更有些時候zombie 硬 kill 也砍不掉,搞到最後,只有將機器reboot一途。