【问题标题】:How can I check if a process is still running from the kernel in c?如何检查进程是否仍在 c 内核中运行?
【发布时间】:2012-07-10 03:41:19
【问题描述】:

到目前为止,我看到的所有答案似乎都只是在用户空间内进行检查。我需要一种方法来检查内核空间,特别是在设备驱动程序中。我通过进程的 ioctl 调用获取与进程关联的 task_struct,因此我可以使用其中包含的所有信息。

注意:我正在寻找的进程正在用户空间中运行

【问题讨论】:

    标签: linux process kernel driver


    【解决方案1】:

    这有帮助吗:

    struct task_struct { 
       volatile long state;    /* -1 unrunnable, 0 runnable, >0 stopped */
       ...
    }
    

    【讨论】:

    • 嗯,这绝对看起来应该可以解决问题,但也许我的问题是由其他原因引起的,或者我对 Linux 内核的了解不够。如果我在使用 ctrl-c 运行时停止进程,task->state 会返回大于 0 的值吗?我正在从内核空间向进程发送带有 send_sig_info 的信号。该进程运行良好,并在运行时收到信号,但一旦停止,Linux 就会崩溃。在我发送信号之前我有if(task->state == 0)
    • @user1061166 如果你按 ctrl-c 进程应该不存在了。
    • @user1061166 我不知道,就我的知识而言。我会假设task_struct 会在那时失效。也许您需要锁定获取指针并对其进行测试?
    • 好的,感谢您的帮助。我认为锁在这里不起作用,因为我在应用程序第一次运行时很早就得到了指针,但直到很久以后才检查它。
    • @user1061166 你真的需要那么早得到task_struct,还是你能在测试前再次得到它?
    猜你喜欢
    • 2013-07-21
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多