(我不是Linux或Wine专家......他们是由一个IT人员设立的...我只是一个java人) 我正在研究一个在Linux上运行的java应用程序。它产生了几个做同样事情的线程,即产生进程(java.lang.Process),一些Linux,一些Windows通过wine。在葡萄酒电话会议期间,我的一些主题将无限期挂起。
因为我有几个线程调用相同的linux / windows应用程序,我不能只是为了葡萄酒的ps输出并杀死它,因为我可以杀死很好的葡萄酒过程。
做了一些谷歌搜索,并通过反射我能够从过程中得到pid,但它不对应于使用ps的Linux pid,所以我认为这是一个在酒中运行的pid。
(最后问题......) 有没有办法杀死在葡萄酒中运行的进程,引用它的pid?
答案 0 :(得分:4)
答案 1 :(得分:1)
要终止所有Wine进程,请使用wineserver -k
(所有这些都在同一个WINEPREFIX环境中)。
要杀死特定进程(按winedbg --command "info proc"
列出),您可以通过以下方式运行winedbg
:
然后按以下方式运行winedbg
:
$ 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
由于attach
接受十进制值,您需要将其pid从十六进制转换,这是Bash shell中的示例:
echo $(( 0x0000000d ))
答案 2 :(得分:0)
如果kill -3 PID
其中PID是您感兴趣的Wine进程的id,那么您将在启动该进程的控制台上获得JVM线程转储。此转储将包含具有其当前状态的线程列表,并将包含nid
字段,该字段等于ps -ef -T
输出中的SPID字段。
答案 3 :(得分:0)
如果您太沮丧,请尝试使用Windows任务管理器。它应该能够将葡萄酒过程视为原生葡萄酒。 (当然它根本不会看到其他的,所以总数不会达到100%)。