web-dev-qa-db-ja.com

cygwinターミナルでWindowsプロセスを強制終了する方法は?

Windows上のCygwinでプロセスを強制終了する方法について問題があります。 Cygwinは完全に新しいものです。しかし、私には単純に殺せない仕事があります。次のコマンドを発行してみました。

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

プロセスが実行されているCygwinターミナルでCtrl + Cできないため、別のCygwinターミナルでコマンドを発行しました。私は成功せずにインターネット全体を検索しました。

19
user1093774
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
27
Steven Penny

あなたは試すことができます:

taskkill /pid 4568
7
aggu

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しません。

5
dpminusa

my answer から SOに関する同様の質問 )へ:

異なるWindowsプログラムは、killが送信するシグナルを異なる方法で処理します。 Linux/Cygwinプログラムと同じように処理するように設計されたことはありません。

Windowsプログラムを強制終了するための唯一の信頼できる方法は、タスクマネージャーやプロセスエクスプローラーなどのWindows固有のツールを使用することです。

とは言っても、Cygwinターミナルを管理者モードで実行した方が幸運かもしれません(ショートカットを右クリックして[管理者として実行]を選択)。

2
me_and

ここで考えるべき2つのこと:

  1. WINPIDである正しいPIDを取得します。
  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は削除しません。

1
not2qubit

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も使用できます。

0
244an

Git Bashで使用するもの:

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

Cygwinでは試していませんが、Cygwinでも機能するでしょう。

0