我有一段代码接受进程的PID来执行操作。
除了执行任何系统调用以验证进程(稍后发生的事情)之外,我可以做些什么来断言进程ID是否合理?例如我永远不会接受create or replace procedure F_INS_ORDER_DATA_DETAILS ...
,因为这对申请没有意义。
是否有任何具体的断言/属性可用于对PID值进行一些天真的完整性检查?
答案 0 :(得分:3)
如果您使用的是Linux,则可以尝试执行access("/proc/$PID/")
。
或者更一般地,您可以按照in this answer的说明执行kill(pid, 0)
以查看流程是否存在。
当然,无论你做什么,都会涉及系统调用
答案 1 :(得分:1)
尝试kill()
函数,信号为零。
这是Ubuntu上kill()
手册页的一个片段:
int kill(pid_t pid, int sig);
如果
sig
为0,则不发送任何信号,但仍会执行错误检查; 这可用于检查是否存在进程ID或进程组ID。
答案 2 :(得分:0)
为什么呢?停止第二次猜测用户。内核将为您进行所有健全性检查。这是PID最有效的输入验证 - 是我尝试成功的操作。 0
是某些情况下PID的有效数字。负数也是如此。
如果您的代码作为特权进程运行,并且您正试图限制其可以造成的损害,那么您需要进行一些认真的验证,而不是"完整性检查"。但如果它没有那么你没有理由做任何事情。 "没有这样的过程"是一个足够好的错误信息。