我的主要目的是以循环方式一个接一个地执行进程,直到一个进程调用 receive() 并被阻塞,以便执行切换到队列中的下一个进程。有一个用 Java 编码的 Controller 应用程序,它使用 Runtime.getRuntime().exec() 执行这些进程(也是 Java 应用程序),并保留作为 Process 对象的返回值。
为了实现此目的,我需要捕获 receive() 调用(或其被阻止的状态)并将它们告诉 Controller (主)应用程序。
如果可能的话,我可以达到你想要的最低级别。我的第一个想法是从驱动程序获取此信息,然后将其告诉我的 Controller Java 应用程序。我编写了一个Linux内核网络模块来捕获发送和接收操作,但据我所知,socket.receive()函数不会告诉网络驱动程序任何信息。
所以,我认为可以选择从 JVM 获取此信息,以某种方式从 Linux 命令等获取它,或者可能通过 Linux 内核模块获取它?
您有什么建议?
最佳答案
如果您想知道您的线程是否被阻止,或者确切地知道它们被阻止的原因是什么,您可以进行线程转储或使用类似 jvisualvm 的工具。附加到进程并查看(在 jvisualvm 中,您将附加到进程,进行线程转储,然后查看每个线程的 Activity )。
关于java - 是否可以知道进程是否在 Linux 上的 Receive() 调用上处于阻塞状态等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1017427/