Windows上のCygwinでプロセスを強制終了する方法に関して問題があります。私はCygwinを初めて使用します。しかし、私には単純に殺すことができない仕事があります。次のコマンドを発行しようとしました。
kill 4568
kill -9 4568
/bin/kill -f 4568
プロセスが実行されるCygwinターミナルではCtrl + Cを使用できないため、別のCygwinターミナルでコマンドを発行しました。私は成功しなかったが、インターネット上で検索した。
Windows上のCygwinでプロセスを強制終了する方法に関して問題があります。私はCygwinを初めて使用します。しかし、私には単純に殺すことができない仕事があります。次のコマンドを発行しようとしました。
kill 4568
kill -9 4568
/bin/kill -f 4568
プロセスが実行されるCygwinターミナルではCtrl + Cを使用できないため、別のCygwinターミナルでコマンドを発行しました。私は成功しなかったが、インターネット上で検索した。
回答:
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を使用します。組み込みシェルキルは、一般的なWindowsプロセスのPIDをキルしません。
(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
。
使用する適切なツールはsysinternals PsKill64.exe -t <winpid>
で、スクリプトプロセスのすべての子孫も強制終了しますが、そうしkill
ません。
cat /proc/${ZID}/winpid
。知っておくと良いでしょう。ps -aW | grep ...
少なくともWin 7 x64でのcygwinでは、ソリューションよりも高速です。しかし、PsKill64の-t
場合、サブプロセスを強制終了する必要があると思いますtaskkill
。サブプロセスも強制終了できます。
-t
子孫を殺す必要もあります。正解。
Git Bashでは次を使用します。
targetProcess='chromedriver.exe';
ps -W | grep -i ${targetProcess} | awk '{print $1}' | while read pid; do taskkill //PID ${pid}; done;
Cygwinで試したことはありませんが、Cygwinでも機能すると思います。