在Linux(通常是POSIX)中,如何确定一个线程是否在系统调用中?

我必须知道一个线程是否正在执行一个系统调用(例如读/写等)知道它的tid。 有没有办法在Linux中做到这一点?

这应该列出线程的状态码

ps -p<pid> -o stat 

这两个相关的代码是:

 D uninterruptible sleep (usually IO) S interruptible sleep (waiting for an event to complete) 

编辑:如果你想以编程的方式得到确切的系统调用,你可以按照你的建议使用ptrace并且读取EAX ,你也应该使用PTRACE_SYSCALL标志来让进程在下次系统调用时停止。