4

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

因为我有几个线程调用相同的 linux/windows 应用程序,所以我不能只是 grep ps 输出的 wine 并杀死它,因为我可以杀死很好的 wine 进程。

做了一些谷歌搜索,通过反射,我能够从进程中获取 pid,但它与使用 ps 的 Linux pid 不对应,所以我认为它是在 wine 中运行的 pid。

(最后是问题......)有没有办法杀死在葡萄酒中运行的进程引用它的pid?

4

4 回答 4

3

Wine,至少在最近的版本中,确实带有自己的taskmgrtaskkill,类似于 Windows 上的同名程序。

于 2011-01-06T00:06:03.177 回答
2

要杀死所有 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 ))
于 2016-12-19T18:07:29.627 回答
0

如果您太沮丧,请尝试使用 Windows 任务管理器。它应该能够将葡萄酒流程视为原生流程。(当然它根本看不到其他的,所以总数不会达到 100%)。

于 2010-12-29T19:37:20.337 回答
0

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

于 2010-12-29T19:11:51.000 回答