私は計算量の多いコードに取り組んでいます-今のところ-たくさんクラッシュしますが、まだ取り組んでいます:)クラッシュすると、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を取得して強制終了するコマンドをパイプするのは簡単だと思いますが、どこから始めればよいのかわかりません。
誰も私にヒントを与えることができますか?
さらにいくつかのパイプを使用すると、目的の場所に移動できます。私がそれをする方法は次のとおりです。
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プロセスのみを強制終了するように検索語を編集できます。
Java
という名前のすべてのプロセスを強制終了する場合は、次のコマンドを使用できます。
killall -9 Java
このコマンドは、名前で識別されるプロセスにシグナルを送信します。
テキストエディターを開き、この短い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 。
これは、@ Deanの以前の回答に基づいた代替アプローチです。
これは、 jps を使用してJavaプロセスを識別します。
kill $(jps | grep <MainClass> | awk '{print $1}')
MainClassは、mainメソッドを含む実行中のJavaプログラム内のクラスです。