流程ID在Linux中是非负面的吗?

时间:2012-03-06 13:01:43

标签: linux pid negative-number

我正在实现一个在用户空间中调用的系统调用,比如foo。 系统调用访问foo的task_struct(通过全局指针当前),打印它的名称和pid,然后继续执行foo的父进程,foo的父进程的父进程等。打印所有名称和pid,包括init进程的。

pid = 1保留给init,pid = 0保留给swapper。

根据swapper的task_struct,它的父进程本身就是。

Swapper(或sched)总是有pid = 0并且始终是init的父进程吗?

所有的pids都是非阴性的吗?我可以做出这样的假设吗?

3 个答案:

答案 0 :(得分:5)

更简洁地回答您的问题:

  • IBM的Inside the Linux boot process将交换器进程描述为PID值为0的进程。启动时,此进程运行/sbin/init(或引导加载程序作为参数给出的另一个进程),通常是PID 1的过程。
  • 在Unix系统中,PID值分配sequentially,从第一个进程开始,直到/proc/sys/kernel/pid_max指定的最大值。因此,您可以安全地假设所有有效的PID都具有正值,而负数可以归结为误差值等。
  • 一个好主意也是会计zombie个进程,因为当它们被init采用时,它们可以在进程树中接收“特殊处理”。

答案 1 :(得分:1)

它始终为正或0.内核源将其定义为pid_t类型,其中afaik被认为是无符号的(尽管它被定义为已签名,以便能够进行如下调用:如果出现错误,fork会返回负数。

答案 2 :(得分:0)

是的,他们实际上总是积极的。

您可以通过几个POSIX系统调用来验证这一点,例如wait,使用负值来表示诸如您自己的所有子进程之类的东西,等等,只有正值表示有效的PID。

示例:http://linux.die.net/man/2/wait