Как убить процесс Windows в терминале Cygwin?


18

У меня проблема с тем, как убить процесс в Cygwin на Windows. Я совершенно новичок в Cygwin. Но у меня есть задача, которую я просто не могу убить. Я попытался выдать следующие команды:

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

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


Какой процесс вы начали, и как вы начали его?
me_and

Смотрите также stackoverflow.com/questions/10877652/...
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 only, попробуйте это: (это работает для меня)

    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, встроенная команда 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для уничтожения дерева процессов, вам не нужно получать идентификатор окна с psпомощью awkи т. Д.
Это протестировано в Win7 x64.

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

Конечно, вы также можете использовать Window 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.