シリアル ポートからデータを読み取る Java アプリケーションがあります/dev/ttyUSB0
。このアプリケーションは Linux で実行され、RXTX ライブラリを使用して Java からシリアル ポートにアクセスします。
シリアルポートがワーカースレッドによって適切に閉じられないことがあり、新しいポートを開始するとjavax.comm.PortInUseException
. メソッドの呼び出し中にワーカー スレッドがスタックclose()
する。これはすでに質問されていますが、そのハックを直接適用することはできません。
Linux のポートを強制的に閉じる方法はありますか? 外部プロセスを呼び出して、root としてシェル スクリプトを実行できます。ポートが OS によって閉じられたら、Java で適切な例外を処理するつもりです。
マシンを再起動できません。
質問する
3271 次
2 に答える
0
まず、コードをデバッグし、デバイス ノードを閉じるスレッドが実際にデバイス ノードを閉じることを確認する必要があります。共有不可能なハードウェア デバイスへのアクセスについて話しているので、RXTX 接続にホルダー パターンを使用すると役立つ場合があります。
プログラムがデバイス ノードを適切に閉じていない場合、唯一の選択肢はそれを強制終了することです。fuser /dev/ttyUSB0
どのプロセスが開いているか、次にkill
その PIDを確認するために使用できます。これにはルート権限は必要ありません。強制終了するプロセスを所有するユーザーとしてアクセスするだけです。
于 2013-09-09T16:48:47.060 に答える