当接受 PID 作为输入时,是否可以进行任何理智的验证?

When accepting PIDs as input, is there any sane validation that can take place?

我有一段代码接受要对其执行操作的进程的 PID。

除了执行任何系统调用来验证进程(稍后发生的事情)之外,我还能做些什么来断言进程 ID 是正常的吗?例如我永远不会接受 0,因为这对申请没有意义。

是否有任何具体的 assertions/properties 可用于对 PID 值进行简单的完整性检查?

为什么?停止猜测用户。内核将为您进行所有完整性检查。这是 PID 最有效的输入验证 - 是我试图成功完成的操作。 0 在某些情况下是 PID 的有效数字。负数也是。

如果您的代码作为特权进程运行并且您试图限制它可能造成的损害,那么您需要一些认真的验证而不是 "sanity checking"。但如果没有,那么你就没有理由做任何事情。 "No such process" 是一个足够好的错误消息。

尝试 kill() 函数,信号为零。 这是 Ubuntu 上 kill() 的手册页的片段:

int kill(pid_t pid, int sig);

If sig is 0, then no signal is sent, but error checking is still performed; this can be used to check for the existence of a process ID or process group ID.

如果你在 Linux,你可以尝试 access("/proc/$PID/")。 或者更一般地说,您可以按照 in this answer 的说明执行 kill(pid, 0) 以查看进程是否存在。

当然,无论你做什么,都会涉及系统调用