Windows上のCygwinでプロセスを強制終了する方法について問題があります。 Cygwinは完全に新しいものです。しかし、私には単純に殺せない仕事があります。次のコマンドを発行してみました。
kill 4568
kill -9 4568
/bin/kill -f 4568
プロセスが実行されているCygwinターミナルでCtrl + Cできないため、別のCygwinターミナルでコマンドを発行しました。私は成功せずにインターネット全体を検索しました。
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
あなたは試すことができます:
taskkill /pid 4568
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を使用してください。埋め込まれたシェルkillは、一般的なWindowsプロセスのPIDをkillしません。
( my answer から SOに関する同様の質問 )へ:
異なるWindowsプログラムは、killが送信するシグナルを異なる方法で処理します。 Linux/Cygwinプログラムと同じように処理するように設計されたことはありません。
Windowsプログラムを強制終了するための唯一の信頼できる方法は、タスクマネージャーやプロセスエクスプローラーなどのWindows固有のツールを使用することです。
とは言っても、Cygwinターミナルを管理者モードで実行した方が幸運かもしれません(ショートカットを右クリックして[管理者として実行]を選択)。
ここで考えるべき2つのこと:
強制終了する正しいWINPIDを取得するには、cat /proc/<PID>/winpid
を使用します。つまりこれを実行してください:
ZID=$$; WINPID=$(cat /proc/${ZID}/winpid); echo "Kill WINPID: ${WINPID}"; ps; sleep 10 &
直後に別のps
を実行します。
使用する適切なツールは sysinternalsPsKill64.exe -t <winpid>
です。これは、スクリプトプロセスのすべての子孫も削除しますが、kill
は削除しません。
Cygwin bashプロセスの下のサブプロセスであるWindowsプログラムがある場合は、taskkill /F /PID [the cygwin process id] /T
を使用してプロセスツリーを強制終了できます。ps
からawk
を使用してウィンドウPIDを取得する必要はありません。等.
これは、Win7 x64でテストされています。
# Simple example in cygwin:
> notepad.exe &
> pid=$!
...
> taskkill /F /PID $pid /T
もちろん、ウィンドウPIDも使用できます。
Git Bashで使用するもの:
targetProcess='chromedriver.exe';
ps -W | grep -i ${targetProcess} | awk '{print $1}' | while read pid; do taskkill //PID ${pid}; done;
Cygwinでは試していませんが、Cygwinでも機能するでしょう。