Pertanyaan Bunuh proses Java


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

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 menjadi tugas mekanis. Jadi biasanya saya menunggu sekitar 7-8 proses untuk macet, dan kemudian kill -9 masing-masing dari mereka.

Saya ingin melakukan ini dengan cara otomatis. Saya pikir itu harus mudah untuk beberapa perintah untuk mengambil id dari hasil (n-1) ps aux | grep java dan membunuhnya tetapi saya tidak tahu harus mulai dari mana.

Adakah yang bisa memberi saya petunjuk?


20
2017-12-11 11:30


asal




Jawaban:


Beberapa pipa lagi akan membawa Anda ke tempat yang Anda inginkan. Begini cara 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 output (dalam hal ini PID)

$(...) adalah substitusi perintah. Pada dasarnya hasil dari perintah batin akan digunakan sebagai argumen untuk kill

Ini memiliki manfaat kontrol yang lebih baik atas apa yang terbunuh. Misalnya, jika Anda menggunakan sistem bersama, Anda dapat mengedit istilah pencarian sehingga hanya mencoba untuk membunuh proses java Anda sendiri.


19
2017-12-11 18:49





Jika Anda ingin membunuh semua proses yang diberi nama java Anda dapat menggunakan perintah berikut:

killall -9 java

Perintah ini mengirim sinyal ke proses yang diidentifikasi oleh namanya.


37
2017-12-11 11:59



killall java tidak bekerja untuk saya karena beberapa alasan acak yang tidak dapat saya selesaikan. Itu -9 parameter merawat itu. Terima kasih. - Paul Nelson Baker
9 adalah SIGKILL. Program tidak dapat mengabaikannya, dan pada dasarnya mengatakan: hentikan diri Anda sekarang. - Milan Todorovic


Buka editor teks dan simpan skrip bash singkat 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 ~/killjava di terminal sehingga Anda dapat mengeksekusi file.

Maka Anda bisa menelepon ~/killjava dari terminal dan proses Java Anda akan mati batu. Anda mungkin ingin mempertimbangkan sumber daya apa lainnya yang Anda gunakan untuk membunuh proses Java dengan cara ini (seperti koneksi basis data) akan terpengaruh. Misalnya, mungkin kill -15 akan lebih tepat - lihat penjelasannya sini.


3
2017-12-11 11:46





Berikut ini adalah pendekatan alternatif, berdasarkan jawaban sebelumnya @ Dean.

Ini menggunakan jps untuk mengidentifikasi proses java.

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

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


2
2017-10-04 18:27