【问题标题】:How to cancel a process waiting to return with ptrace()如何使用 ptrace() 取消等待返回的进程
【发布时间】:2018-02-20 10:18:03
【问题描述】:

当进程调用 wait()、read()、recvfrom() 或类似方法时,我试图取消,因为如果我在其上使用 ptrace,在 PTRACE_ATTACH 和之后的 PTRACE_CONT 之后,我的跟踪器会被阻塞,直到跟踪返回。我也认为 sleep() 也会发生这种情况。

是否可以取消通话,或重现虚假退货?

谢谢。

【问题讨论】:

    标签: system-calls nonblocking ptrace


    【解决方案1】:

    是的,您应该发送PTRACE_INTERRUPT。这将触发系统调用退出。

    为此,您无需在您的被跟踪者上waitpid,因为这也会阻止您(跟踪者)。

    您可以拥有多个线程:一个会在被跟踪者上阻塞,一个会“决定”取消阻塞的系统调用 - 例如用户将按下“取消”的 GUI 线程(如普通调试器,例如 GDB)。

    或者您可以使用PTRACE_SYSCALL 手动诊断程序正在执行的每个系统调用,然后先发制人地决定是否要执行该系统调用。通过这种方式,您可以决定根本不运行 wait,或者通过返回值来模拟它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-06
      • 2016-09-03
      相关资源
      最近更新 更多