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

时间:2017-02-28 08:43:43

标签: c unix pid

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

除了执行任何系统调用以验证进程(稍后发生的事情)之外,我可以做些什么来断言进程ID是否合理?例如我永远不会接受create or replace procedure F_INS_ORDER_DATA_DETAILS ... ,因为这对申请没有意义。

是否有任何具体的断言/属性可用于对PID值进行一些天真的完整性检查?

3 个答案:

答案 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的有效数字。负数也是如此。

如果您的代码作为特权进程运行,并且您正试图限制其可以造成的损害,那么您需要进行一些认真的验证,而不是"完整性检查"。但如果它没有那么你没有理由做任何事情。 "没有这样的过程"是一个足够好的错误信息。