title: linux kernel check if process is still running
body: <p>I'm working in kernel space and I want to find out when an application has stopped or crashed.
  When I receive an ioctl call, I can get the struct task_struct where I have a lot of information regarding the process of the application.
  My problem is that I want to periodically check if the process is still alive or better yet, to have some asynchronous call when the process is killed.</p>
  
  <p>My test environment was on QEMU and after a while in the application I've run a system("kill -9 <em>pid</em>").  Meanwhile in the kernel I've had a periodical check on task_struct with:<br>
  volatile long state;    /* -1 unrunnable, 0 runnable, >0 stopped */<br>
  static inline int pid_alive(struct task_struct *p)<br></p>
  
  <p>The problem is that my task_struct pointer seems to be unmodified. Normally I would say that each process has a task_struct and of course it is corespondent with the process state. Otherwise I don't see the point of "volatile long state"</p>
  
  <p>What am I missing? Is it that I'm testing on QEMU, it is that I've tested checking the task_struct in a while(1) with an msleep of 100? Any help would be appreciated.</p>
  
  <p>I would be partially happy if I could receive the pid of the application when the app is closing the file descriptor of the module ("/dev/driver").</p>
  
  <p>Thanks!</p>