【问题标题】:SIGSTOP a task while in disk sleep in own kernel moduleSIGSTOP 在自己的内核模块中的磁盘睡眠中的任务
【发布时间】:2013-07-19 09:13:20
【问题描述】:

我目前正在开发一种使用自定义核心格式的崩溃收集机制。本质上,它挂钩 linux_binfmt->core_dump 条目以指向我们的转储程序。

转储程序本身会启动一个用户模式助手,其中包含进程的 PID,以在允许内核完全杀死进程之前通过 ptrace 捕获哪个转储进程信息:

call_usermodehelper(argv[0], argv, envp, UMH_WAIT_PROC);

我的问题是该任务在技术上处于磁盘睡眠状态并且没有停止,因此 ptrace 调用失败。

我尝试 SEND_SIG_FORCED SIGSTOP 无济于事:

send_sig_info(SIGSTOP, SEND_SIG_FORCED, current);

任何关于如何阻止进程终止但将其置于停止状态以使 ptrace 用户模式收集器工作的建议将不胜感激。

【问题讨论】:

    标签: linux kernel scheduler coredump


    【解决方案1】:

    找到了解决方案,部分原因是在 ptrace 中检查了一些不一致的标志:

    printk(KERN_INFO "%s Launching usermode helper for %d\n", __FUNCTION__, current->pid);
    
    call_usermodehelper(argv[0], argv, envp, UMH_NO_WAIT);
    set_current_state(TASK_UNINTERRUPTIBLE | TASK_TRACED);
    schedule();
    
    printk(KERN_INFO "%s user-mode helper done! killing pid %d\n", __FUNCTION__, current->pid);
    

    这会将任务置于跟踪睡眠状态,然后助手可以附加到它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 2012-01-08
      • 2014-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多