【问题标题】:C - Get PID of process opened with popenC - 获取使用 popen 打开的进程的 PID
【发布时间】:2012-03-16 18:34:22
【问题描述】:

我有一个用 C 编写的程序,它使用 popen 打开另一个程序。我想获取该程序的 pid 或某种处理程序,以便在一定时间限制后杀死它,或者如果它超过了一些 ram 和 stdout 限制。我觉得这必须用ptrace来完成,它需要PID,我不知道如何获取。

【问题讨论】:

    标签: c popen kill pid ptrace


    【解决方案1】:

    您还可以使用 ulimits 和其他技巧来实现所需的功能,而无需使用 ptrace。你可以通过将你的命令写成类似于"sh -c 'ulimit [ulimit strings]; whatever-command'" 来做到这一点。 ulimit -v 负责 RAM 限制。 CPU 时间限制 (ulimit -t) 可能能够接近时间限制;如果没有,并且如果你愿意重写popen,那么你可以在那里拨打setitimer。 stdout 不那么简单;但如果您使用 shell 重定向记录标准输出,那么我认为 ulimit -f 会这样做。如果您在父母中读取孩子的标准输出,您可以自己跟踪它,如果时间过长,则用信号杀死。

    【讨论】:

      【解决方案2】:

      只需编写您自己的 popen 实现即可返回 PID。它比现有的popen 周围的一些疯狂的黑客要丑得多。你可以在网上找到popen 实现的源代码。 Here's one.

      【讨论】:

      猜你喜欢
      • 2011-12-20
      • 2011-05-20
      • 1970-01-01
      • 2011-06-11
      • 2013-04-05
      • 2022-01-26
      • 1970-01-01
      • 2010-09-22
      • 2021-08-08
      相关资源
      最近更新 更多