当接受 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)
以查看进程是否存在。
当然,无论你做什么,都会涉及系统调用
我有一段代码接受要对其执行操作的进程的 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)
以查看进程是否存在。
当然,无论你做什么,都会涉及系统调用