私の主な目的は、receive()を呼び出してブロックされるまで、ラウンドロビン方式でプロセスを1つずつ実行して、実行がキュー内の次のプロセスに切り替わるようにすることです。 Javaでコーディングされ、Runtime.getRuntime()。exec()を使用してこれらのプロセス(Javaアプリケーションでもある)を実行し、Processオブジェクトである戻り値を保持するコントローラアプリケーションがあります。LinuxでReceive()呼び出しでプロセスがBlocked状態で待機しているかどうかを知ることはできますか?
この目的を達成するには、receive()コール(またはブロックされている状態)をキャプチャして、コントローラ(マスター)アプリケーションに通知する必要があります。
可能であれば、私は低レベルにすることができます。私の最初の考えは、ドライバからこの情報を取得し、それをコントローラのJavaアプリケーションに伝えることでした。私は、送受信動作をキャプチャするLinuxカーネルネットワークモジュールを作成しましたが、AFAIK socket.receive()関数はネットワークドライバに何も伝えません。
私は、この情報をJVMから取得するか、何らかの理由でlinuxコマンドから取得するか、場合によってはLinuxカーネルモジュールから取得することを選択肢と考えていますか?
あなたの提案は何ですか?
スレッドダンプ途中で... –
スレッドはまだRunnable状態にあるようですが、スタックトレースからはaccept()、receive()などの呼び出しを見ることができます。これはトリックを行うと思われるが、ブロックされているかどうかをチェックし、出力を解析するためにjstackを~200 msごとに実行する必要があるだろう(これはパフォーマンス上あまり良くない)それがreceive()などの呼び出しでブロックされたときに私に信号を送るようにします。それは良い解決策です。それが起こったときに(ほとんど)それを捕まえる必要はなかった。 – Ozan