Bunuh proses Java

25

Saya sedang mengerjakan kode yang berat komputasi - untuk saat ini - banyak crash, tapi saya masih mengerjakannya :) Ketika crash, saya tidak bisa menutup jendela GUI; Saya harus membuka shell dan membunuh proses -9.

Ini adalah proses Java dan mudah ditemukan:

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

Sekarang mudah tetapi cukup tugas mekanis. Jadi biasanya saya menunggu sekitar 7-8 proses crash, dan kemudian kill -9masing-masing.

Saya ingin melakukan ini secara otomatis. Saya pikir seharusnya mudah untuk mem-pipe beberapa perintah untuk mengambil id dari hasil (n-1) ps aux | grep javadan membunuhnya, tetapi saya tidak tahu harus mulai dari mana.

Adakah yang bisa memberi saya petunjuk?

nkint
sumber

Jawaban:

22

Beberapa pipa lagi akan membawa Anda ke tempat yang Anda inginkan. Begini cara saya melakukannya:

search_terms='whatever will help find the specific process' 

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

Inilah yang terjadi:

grep -v 'grep' tidak termasuk proses grep dari hasil.

awk '{print $2}' hanya mencetak kolom ke-2 dari output (dalam hal ini PID)

$(...)adalah substitusi perintah. Pada dasarnya hasil dari perintah dalam akan digunakan sebagai argumen untukkill

Ini memiliki keuntungan dari kontrol yang lebih baik atas apa yang dibunuh. Misalnya, jika Anda menggunakan sistem bersama, Anda dapat mengedit istilah pencarian sehingga hanya mencoba untuk mematikan proses java Anda sendiri.

Dekan
sumber
49

Jika Anda ingin membunuh semua proses yang disebutkan, javaAnda dapat menggunakan perintah berikut:

killall -9 java

Perintah ini mengirimkan sinyal ke proses yang diidentifikasi dengan namanya.

Milan Todorovic
sumber
killall javatidak bekerja untuk saya karena alasan acak yang tidak bisa saya selesaikan. The -9parameter merawat itu. Terima kasih.
Paul Nelson Baker
5
9 adalah SIGKILL. Program tidak dapat mengabaikannya, dan pada dasarnya mengatakan: hentikan diri Anda sekarang.
Milan Todorovic
Pengguna IntelliJ mungkin menemukan IDE mereka macet belum lagi Tomcat, dan banyak aplikasi lainnya. Ini adalah cara yang kasar dan tidak direkomendasikan pada sistem apa pun dengan mengandalkan layanan atau aplikasi produktivitas java.
tresf
3

Buka editor teks dan simpan skrip bash pendek ini di direktori home Anda sebagai 'killjava'

#! /bin/bash

# Kill Java process

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

kill -9 $PID

Kemudian chmod u+x ~/killjavadi terminal sehingga Anda dapat menjalankan file.

Kemudian Anda bisa menelepon ~/killjavadari terminal dan proses Java Anda akan mati. Anda mungkin ingin mempertimbangkan sumber daya lain apa saja yang akan terpengaruh oleh pembunuhan Anda terhadap proses Java (seperti koneksi database). Misalnya, mungkin kill -15akan lebih tepat - lihat penjelasannya di sini .

Clive van Hilten
sumber
2

Ini adalah pendekatan alternatif, berdasarkan jawaban @ Dean sebelumnya.

Ini menggunakan jps untuk mengidentifikasi proses java.

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

MainClass adalah kelas dalam program java Anda yang berisi metode utama.

Pawan
sumber