2

シリアル ポートからデータを読み取る Java アプリケーションがあります/dev/ttyUSB0。このアプリケーションは Linux で実行され、RXTX ライブラリを使用して Java からシリアル ポートにアクセスします。
シリアルポートがワーカースレッドによって適切に閉じられないことがあり、新しいポートを開始するとjavax.comm.PortInUseException. メソッドの呼び出し中にワーカー スレッドがスタックclose()する。これはすでに質問されていますが、そのハックを直接適用することはできません。
Linux のポートを強制的に閉じる方法はありますか? 外部プロセスを呼び出して、root としてシェル スクリプトを実行できます。ポートが OS によって閉じられたら、Java で適切な例外を処理するつもりです。
マシンを再起動できません。

4

2 に答える 2

0

まず、コードをデバッグし、デバイス ノードを閉じるスレッドが実際にデバイス ノードを閉じることを確認する必要があります。共有不可能なハードウェア デバイスへのアクセスについて話しているので、RXTX 接続にホルダー パターンを使用すると役立つ場合があります。

プログラムがデバイス ノードを適切に閉じていない場合、唯一の選択肢はそれを強制終了することです。fuser /dev/ttyUSB0どのプロセスが開いているか、次にkillその PIDを確認するために使用できます。これにはルート権限は必要ありません。強制終了するプロセスを所有するユーザーとしてアクセスするだけです。

于 2013-09-09T16:48:47.060 に答える