убить процесс, запущенный в Wine, из командной строки - PullRequest
4 голосов
/ 29 декабря 2010

(Я не Linux или Wine pro ... они были созданы ИТ-специалистом ... Я просто Java-парень) Я работаю над Java-приложением, которое работает на Linux.Он порождает несколько потоков, которые делают одно и то же, а именно порождают процессы (java.lang.Process), некоторые Linux, некоторые Windows через wine.Некоторые из моих потоков будут зависать бесконечно во время вызовов Wine.

Поскольку у меня несколько потоков, которые вызывают одни и те же приложения linux / windows, я не могу просто собрать вывод ps для wine и убить его, потому что я могубить винные процессы, которые в порядке.

Я немного погуглил, и благодаря рефлексии я смог получить pid из процесса, но он не соответствует pid для Linux с использованием ps, поэтому я думаю, что это pid, работающий в Wine.

(наконец, вопрос ...) Есть ли способ убить процесс, выполняющийся в wine, ссылаясь на его pid?

Ответы [ 4 ]

4 голосов
/ 06 января 2011

Wine, по крайней мере в последних версиях, имеет собственные taskmgr и taskkill , аналогичные программам с таким же именем в Windows.

1 голос
/ 19 декабря 2016

Чтобы убить все процессы 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:

echo $(( 0x0000000d ))
0 голосов
/ 29 декабря 2010

Если вы слишком расстроены, попробуйте диспетчер задач Windows.Он должен видеть винные процессы как родные.(Конечно, другие не будут видны вообще, поэтому общая сумма не составит 100%).

0 голосов
/ 29 декабря 2010

Когда вы делаете kill -3 PID, где PID является идентификатором интересующего вас процесса Wine, вы получите дамп потока JVM на консоли, где вы запустили этот процесс.Этот дамп будет содержать список потоков с их текущим состоянием и будет содержать поле nid, которое равно полю SPID при выводе ps -ef -T.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...