(我不是 Linux 或 Wine 专业人士...它们是由 IT 人员设置的...我只是 Java 人员)我正在开发一个在 Linux 上运行的 java 应用程序。它产生几个做同样事情的线程,即产生进程(java.lang.Process),一些Linux,一些Windows通过wine。我的一些线程将在 wine 调用期间无限期地挂起。
因为我有几个线程调用相同的 linux/windows 应用程序,所以我不能只 grep wine 的 ps 输出并杀死它,因为我可以杀死没问题的 wine 进程。
做了一些谷歌搜索,通过反射,我能够从进程中获取 pid,但它与使用 ps 的 Linux pid 不对应,所以我认为它是在 wine 中运行的 pid。
(最后一个问题...)有没有办法杀死在 wine 中运行并引用它的 pid 的进程?
要终止所有 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
Run Code Online (Sandbox Code Playgroud)
由于attach接受十进制值,因此您需要将其 pid 从十六进制转换,以下是 Bash shell 中的示例:
echo $(( 0x0000000d ))
Run Code Online (Sandbox Code Playgroud)