Як вбити процес Windows у терміналі cygwin?


18

У мене проблема з тим, як вбити процес у Cygwin в Windows. Я абсолютно новий в Cygwin. Але в мене є завдання, яке я просто не можу вбити. Я спробував видати наступні команди:

kill 4568
kill -9 4568
/bin/kill -f 4568

Я видав команди в окремому терміналі Cygwin, оскільки не можу Ctrl + C це в терміналі Cygwin, де запускається процес. Я шукав по Інтернету без успіху.


Який процес ви розпочали, і як ви його запустили?
me_and

Відповіді:


25
ps -W | awk '/calc.exe/,NF=1' | xargs kill -f

Або

ps -W | awk '$0~v,NF=1' v=calc.exe | xargs kill -f

Або

powershell kill -n calc

Ви можете скористатися, ps -W | awk 'BEGIN{ IGNORECASE=1;} /calc.exe/,NF=1' | xargs kill -fтому що Windows не
чутливий до

7

Ви можете спробувати:

taskkill /pid 4568

taskkill /im:{name-of-executable}корисна також.
LawrenceC

і taskkill /im <name-of-exe> /fще корисніше.
Ерік Каплун

1
Погана відповідь, ОП попросив команду Cygwin.
Хашим

1
Це taskkill //im <name-of-exe>(зауважте, що потрібно 2
косої

5

Якщо ви хочете лише рішення BASH, спробуйте це: (це працює для мене)

    KILLPS="<My Process Name>"
    WINPS=`ps -W | grep -i $KILLPS`         # Make case-insensitive.
    PID=`echo $WINPS | cut -d' ' -f1` 
    /bin/kill -f "$PID"

ПРИМІТКА: використання / bin / kill, вбудована оболонка не вбиватиме PID-адреси для загальних процесів Windows.


Ваша примітка про / bin / kill vs shell kill була дуже корисною. Спасибі
Філ

2

моєї відповіді на аналогічне запитання про SO ):

Різні програми Windows будуть по-різному обробляти сигнали, які вбивають; вони ніколи не були розроблені для того, щоб поводитися з ними так само, як і програми Linux / Cygwin.

Єдиний надійний метод вбивства програми Windows - це використання специфічного інструмента для Windows, наприклад, диспетчера завдань або провідника процесів.

Однак, якщо ви ще цього не зробили, можливо, вам пощастить запустити термінал Cygwin в режимі адміністратора (клацніть правою кнопкою миші на ярлику та виберіть "Запустити як адміністратор").


1

Тут слід думати про дві речі:

  1. Отримайте правильний PID, який є WINPID.
  2. Скористайтеся правильним інструментом.

Щоб отримати правильний WINPID для вбивства, використовуйте cat /proc/<PID>/winpid. Тобто виконайте це:

ZID=$$; WINPID=$(cat /proc/${ZID}/winpid); echo "Kill WINPID: ${WINPID}"; ps; sleep 10 &

і відразу після того, як зробити інше ps.

Правильним інструментом для використання є sysinternals, PsKill64.exe -t <winpid> який також вбиває всіх нащадків процесу скриптів, що killне робить.


1
Ви отримали голосування за cat /proc/${ZID}/winpid, дуже добре знати. І швидше, ніж рішення з ps -aW | grep ..., принаймні, на моєму cygwin під Win 7 x64. Але для PsKill64 я думаю, що вам потрібно -tвбити підпроцеси, а taskkillтакож можна вбити підпроцеси.
244.

Так, вам також потрібно -tвбити нащадків. Виправлена ​​відповідь.
not2qubit

0

Якщо у вас є програма Windows, яка є підпроцесом під час cygwin bash-процесу, який ви можете використовувати taskkill /F /PID [the cygwin process id] /Tдля вбивання дерева процесів, не потрібно отримувати вікно PID з psі awkт. Д.
Це тестується під Win7 x64.

# Simple example in cygwin:
> notepad.exe &
> pid=$!
...
> taskkill /F /PID $pid /T

Звичайно, ви можете використовувати і вікно PID.


0

У Git Bash я використовую:

targetProcess='chromedriver.exe';
ps -W | grep -i ${targetProcess} | awk '{print $1}' | while read pid; do taskkill //PID ${pid}; done;

Я не пробував цього в Cygwin, але, мабуть, він теж буде працювати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.