Re: finding process blocking on a system call

From: Daniel Gryniewicz
Date: Thu Jan 06 2005 - 11:05:22 EST


On Thu, 2005-01-06 at 04:18 -0800, selvakumar nagendran wrote:
> Hello linux-experts,
> I want to find whether a process blocks in a system
> call due to the unavailability of the resource that is
> accessed in it. For eg, if a semaphore key is not
> available to the process while executing the system
> calls like read, write etc, it will wait in the
> TASK_INTERRUPTIBLE state.
> Now, I don't want the process to simply sleep,
> waiting for the semaphore. I want it to be added into
> the runqueue again. And also, I want to determine this
> in the kernel module. How can I do this? Can anyone
> help me regarding this?
> I am intercepting system calls in kernel 2.4.28.
>
> Thanks,
> selva
>

This is a very bad idea, as the process will expect the syscall to be
complete when it runs again. Just use the non-blocking versions of the
syscall (file/network IO all have non-blocking versions), and handle the
EWOULDBLOCK return value in your userspace application.

Daniel
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/