2010-12-29 30 views
2

(私はLinuxやWineプロではありません...彼らはIT担当者によって設定されています...私はただのJavaユーザーです) 私は作業していますLinux上で動作するJavaアプリケーションです。これは同じことをするいくつかのスレッド、つまりプロセスの生成(java.lang.Process)、いくつかのLinux、ワインを通していくつかのWindowsを生成します。私のスレッドの中には、ワインの呼び出し中に無期限にハングするものがあります。コマンドプロンプトからワインを実行しているプロセスを終了させる

私は同じlinux/windowsアプリケーションを呼び出すいくつかのスレッドを持っているので、ps出力をgrepにgrepすることはできません。

グーグルやリフレクションを通して、プロセスからpidを得ることはできましたが、psを使ったLinuxのpidには対応していないので、私はそれがwineで動くpidだと思っています。

(最後に質問...) pidを参照しているワインで実行中のプロセスを強制終了する方法はありますか?

答えて

0

kill -3 PID PIDがワインのIDである場合、関心のあるプロセスは、そのプロセスを起動したコンソールにJVMスレッドダンプを取得します。このダンプには現在の状態を持つスレッドのリストが含まれ、出力にはps -ef -TのSPIDフィールドに等しいnidフィールドが含まれます。

+0

ご回答ありがとうございます。 あなたの提案を試してみると、pidは認識されません。 -bash-3.2 $ kill -3 5245 -bash:kill:(5245) - そのようなプロセスはありません これは私のOPのコメントと一貫していますが、プロセスからPIDを取得できますが、 psを使用しているLinuxのpidに対応していません。別の見方をすると、間違っているかもしれないと思います。 おそらくもっと詳細が必要です... プロセスが最初に起動した後、バッファを使用してプロセスの出力ストリームを転送する別のスレッドを生成します。 ... – jgreen

+0

プロセスが終了したことを知らせる結果を返したら、ストリーム転送を行っているスレッドが終了するのを待ちます。 ストリーム転送を行っているスレッドは、実際にハングが発生した場所(発生した場合)です。私は何とかプロセス出力ストリームは、(バイト数を読み取るために-1を返すことによって)処理を完了しなければならないことをバッファに知らせないので、読み取り操作でブロックされると思います。 これは実際に私が殺したいものですが、プロセスpidはプロセスが完了したために何かを指していない可能性があります。 ... – jgreen

+0

私はハングしたストリーム転送がプロセスをまだアクティブにさせると仮定しました。 もし私があるなら、私はある種のJavaソリューションに戻ってきたと思います。 – jgreen

0

あまりにも不満を感じる場合は、Windowsのタスクマネージャを使用してください。それはワインのプロセスをネイティブとして見ることができるはずです。 (もちろん、他のものは表示されないので、合計は100%になりません)。

3

ワインは、少なくとも最近のバージョンでは、Windows上で同じ名前のプログラムに類似して、taskmgrtaskkillが付属しています。

1

すべてのワインプロセスを終了するには、wineserver -k(すべて同じWINEPREFIX環境内)を使用します。特定のプロセス(winedbg --command "info proc"リストを)殺すために、あなたは次のようにwinedbgを実行することができます

すると、次のようにwinedbgを実行します。attachは小数点値を受け入れているので

$ winedbg 
Wine-dbg>info proc 
pid  threads executable (all id:s are in hex) 
0000000d 4  'taskmgr.exe' 
0000000e 4  'services.exe' 
0000001a 3  \_ 'plugplay.exe' 
Wine-dbg>attach 13 
0x9f68ad05 read$UNIX2003+0x5 in libsystem_kernel.dylib: call 0x9f68b40c _sysenter_trap in libsystem_kernel.dylib 
Wine-dbg>kill 
Wine-dbg>quit 

、あなたはそのpidを16進数から変換する必要があります。ここではBashシェルの例です:

echo $((0x0000000d)) 
関連する問題