从命令提示符中杀死在wine中运行的进程

(我不是一个Linux或葡萄酒专业人员…他们是由一个IT人员build立的……我只是一个Java人)我正在开发一个运行在Linux上的Java应用程序。 它产生了几个线程,做同样的事情,即产卵进程(java.lang.Process),一些Linux,通过葡萄酒一些Windows。 我的一些线程将在葡萄酒调用期间无限期地挂起。

因为我有几个线程去调用相同的Linux / Windows应用程序,我不能只是grep的酒输出ps和杀死,因为我可以杀死葡萄酒进程是好的。

有一些使用Googlesearch,通过反思,我能够从过程中获得pid,但它不符合使用ps的Linux pid,所以我认为这是一个在酒中运行的pid。

(最后的问题…)有没有办法杀死一个进程在葡萄酒引用它的PID?

至少在最近的版本中,Wine自带有taskmgr和taskkill ,类似于Windows上同名的程序。

要杀死所有的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 )) 

当你kill -3 PID ,其中PID是你感兴趣的Wine进程id时,你将在启动该进程的控制台上获得JVM线程转储。 该转储将包含具有其当前状态的线程列表,并且将包含等于ps -ef -T输出中的SPID字段的nid字段。

如果您太沮丧,请尝试使用Windows任务管理器。 它应该能够看到葡萄酒过程是原生的。 (当然不会看到别人,所以总数不会达到100%)。