java - 是否可以知道进程是否在 Linux 上的 Receive() 调用上处于阻塞状态等待?

标签 java linux-kernel jvm blocking

我的主要目的是以循环方式一个接一个地执行进程,直到一个进程调用 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/

相关文章:

multithreading - 如何实现线程库?

java - 为什么会发生 Full GC Continuous?

java - 由于 xcodebuild 失败 : xcodebuild failed with code 65,无法启动 WebDriverAgent

java - 如何使用html、servlet将图像插入mysql

java - 对象动画只会为对象设置一次动画

c - semaphore.c 中的等待列表实现

linux - 为什么对/etc/limits 的更改不起作用

java - 我从来没有见过以jar形式发布的软件,那么我怎样才能让一个软件也以exe形式发布呢?

java - 如何从编译时未知的索引处的局部变量加载引用?

java - 关闭 Swing 应用程序时进行整理