Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在c中检查进程是否仍在从内核运行?_Linux_Process_Kernel_Driver - Fatal编程技术网

Linux 如何在c中检查进程是否仍在从内核运行?

Linux 如何在c中检查进程是否仍在从内核运行?,linux,process,kernel,driver,Linux,Process,Kernel,Driver,到目前为止,我看到的所有答案似乎都只是在用户空间中进行检查。我需要一种从内核空间检查的方法,特别是在设备驱动程序中。我通过进程的ioctl调用获得与进程相关联的task_struct,因此我可以使用其中包含的所有信息 注意:我正在寻找的进程正在用户空间中运行这是否有帮助: struct task_struct { volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ ... } 嗯,这看起来确

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

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

这是否有帮助:

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

嗯,这看起来确实应该起作用,但也许我的问题是由其他原因造成的,或者我只是对Linux内核了解不够。如果在进程使用ctrl-c运行时停止进程,任务->状态是否会返回大于0的值?我正在从内核空间向进程发送带有send_sig_info的信号。进程运行正常,并在运行时收到信号,但一旦停止,Linux就会崩溃。在发送信号之前,我有
if(task->state==0)
。@user1061166如果按ctrl-c,进程应该已经不存在了。@user1061166我不知道,这是我所知的范围。我会假设
task\u struct
会在那时失效。也许你需要一个锁来获取指针并测试它?好的,谢谢你的帮助。我认为锁在这里不起作用,因为我在应用程序第一次运行时很早就得到了指针,但直到很久以后才检查它。@user1061166您真的需要这么早得到
任务结构
,还是可以在测试之前再次得到它?