Linux 中的进程 ID 是非负数吗?

问题描述 投票:0回答:3

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

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

根据swapper的task_struct,它的父进程就是它自己。

Swaper(或 sched)始终具有 pid=0 并且始终是 init 的父进程?

所有 pid 都是非负数吗?我可以做出这样的假设吗?

linux pid negative-number
3个回答
7
投票

更简洁地回答您的问题:

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

3
投票

它始终为正数或 0。内核源代码将其定义为

pid_t
类型,据我所知,该类型被认为是无符号的(尽管它被定义为有符号以便能够进行诸如
fork
return 之类的调用出现错误时为负数)。


2
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.