web-dev-qa-db-ja.com

Javaプロセスを強制終了します

私は計算量の多いコードに取り組んでいます-今のところ-たくさんクラッシュしますが、まだ取り組んでいます:)クラッシュすると、GUIウィンドウを閉じることができません。シェルを開いてプロセスを強制終了する必要があります。

これはJavaプロセスであり、簡単に見つけることができます。

nkint@zefiro:~$ ps aux | grep Java
nkint   2705 16.6  1.0 460928 43680 ?        Sl   12:23   0:08 /usr/lib/jvm/Java-6-Sun-1.6.0.26/bin/Java -Djava.library.path=something something
nkint   2809  0.0  0.0   4012   776 pts/0    S+   12:24   0:00 grep --color=auto Java
nkint@zefiro:~$ kill -9 2705

今では簡単ですが、非常に機械的な作業です。したがって、通常、約7〜8個のプロセスがクラッシュするのを待ってから、それらをそれぞれkill -9します。

これを自動的に行いたいです。 ps aux | grep Javaの(n-1)個の結果のIDを取得して強制終了するコマンドをパイプするのは簡単だと思いますが、どこから始めればよいのかわかりません。

誰も私にヒントを与えることができますか?

24
nkint

さらにいくつかのパイプを使用すると、目的の場所に移動できます。私がそれをする方法は次のとおりです。

search_terms='whatever will help find the specific process' 

kill $(ps aux | grep "$search_terms" | grep -v 'grep' | awk '{print $2}')

ここで何が起こっているのですか:

grep -v 'grep'は、結果からgrepプロセスを除外します。

awk '{print $2}'は、出力の2列目(この場合はPID)のみを出力します

$(...)はコマンド置換です。基本的に、内部コマンドの結果は、killの引数として使用されます

これには、殺されるものをより細かく制御できるという利点があります。たとえば、共有システムを使用している場合は、独自のJavaプロセスのみを強制終了するように検索語を編集できます。

22
Dean

Javaという名前のすべてのプロセスを強制終了する場合は、次のコマンドを使用できます。

killall -9 Java

このコマンドは、名前で識別されるプロセスにシグナルを送信します。

48
Milan Todorovic

テキストエディターを開き、この短いbashスクリプトをホームディレクトリに「killjava」として保存します。

#! /bin/bash

# Kill Java process

# Determine the pid
PID=`ps -C Java -o pid=`

kill -9 $PID

その後、ターミナルでchmod u+x ~/killjavaを実行して、ファイルを実行できるようにします。

その後、ターミナルから~/killjavaを呼び出すだけで、Javaプロセスは完全に停止します。この方法でJavaプロセスを強制終了すると、他のどのリソース(データベース接続など)が影響を受けるかを検討できます。たとえば、おそらくkill -15の方が適切です。説明を参照してください here

3

これは、@ Deanの以前の回答に基づいた代替アプローチです。

これは、 jps を使用してJavaプロセスを識別します。

kill $(jps | grep <MainClass> | awk '{print $1}')

MainClassは、mainメソッドを含む実行中のJavaプログラム内のクラスです。

2
Pawan