我正在实现一个在用户空间中调用的系统调用,比如foo。 系统调用访问foo的task_struct(通过全局指针当前),打印它的名称和pid,然后继续执行foo的父进程,foo的父进程的父进程等。打印所有名称和pid,包括init进程的。
pid = 1保留给init,pid = 0保留给swapper。
根据swapper的task_struct,它的父进程本身就是。
Swapper(或sched)总是有pid = 0并且始终是init的父进程吗?
所有的pids都是非阴性的吗?我可以做出这样的假设吗?
答案 0 :(得分:5)
更简洁地回答您的问题:
/sbin/init
(或引导加载程序作为参数给出的另一个进程),通常是PID 1的过程。/proc/sys/kernel/pid_max
指定的最大值。因此,您可以安全地假设所有有效的PID都具有正值,而负数可以归结为误差值等。答案 1 :(得分:1)
它始终为正或0.内核源将其定义为pid_t
类型,其中afaik被认为是无符号的(尽管它被定义为已签名,以便能够进行如下调用:如果出现错误,fork
会返回负数。
答案 2 :(得分:0)
是的,他们实际上总是积极的。
您可以通过几个POSIX系统调用来验证这一点,例如wait,使用负值来表示诸如您自己的所有子进程之类的东西,等等,只有正值表示有效的PID。