Saya biasanya menjalankan beberapa aplikasi Java, satu untuk server berjalan secara lokal dan lainnya untuk beberapa IDE seperti NetBeans. Dan dari waktu ke waktu, setelah banyak penugasan kembali, server saya macet di OutOfMemoryException jadi saya harus mematikan proses Java untuk reboot.
Jadi saya lakukan pkill -9 java
tetapi ini juga membunuh IDE saya yang sedang berjalan yang tidak saya inginkan. Jadi, bagaimana saya membunuh hanya aplikasi yang terhubung dengan menjalankan server dan bukan yang lain? Saya berasumsi bahwa mereka semua berjalan di bawah proses yang sama tetapi harus ada beberapa cara bagaimana menjauhkan mereka.
top
ataups
) dan pilih yang benar dan bunuh dengan PID (kill -9 PID_number).PID
. Terima kasih banyakJawaban:
Untuk mematikan proses yang dikaitkan dengan beberapa proses, Anda harus mematikannya dengan menggunakan id proses yang terkait dengan proses itu.
Untuk mendapatkan id proses dari proses java yang dijalankan
output dari perintah ini akan memberikan daftar proses java yang berjalan di sistem Anda. Catat ID Proses (PID) dari proses yang ingin Anda bunuh dan jalankan
sumber
ps ax | grep java | grep -v 'grep' | cut -d '?' -f1 | xargs kill -9
IMO solusi terbaik adalah:
sumber
ps -fC java
menemukannameOfYourJavaAplication
(dalam-Dprogram.name
)Alih-alih menggunakan
ps
dangrep
, Anda dapat menggunakanps
's-C
bendera untuk memilih semua perintah yang terdaftar dengan nama 'java'. Anda juga mungkin ingin menggunakanps
's-f
bendera untuk mencetak nama perintah penuh dari setiap proses yang terdaftar. Dengan begitu, Anda dapat melihat apa yang sebenarnya dilakukan oleh setiap proses java. Berikut adalah perintah secara penuh:ps -fC java
.Anda juga bisa menggunakan
pgrep
daftar proses java.pgrep -a java
akan mengembalikan PID dan baris perintah penuh dari setiap proses java.Setelah Anda memiliki PID dari perintah yang ingin Anda bunuh, gunakan
kill
dengan-9
bendera (SIGKILL) dan PID dari proses java yang ingin Anda bunuh. Java tidak selalu berhenti ketika menerima sinyal 'SIGTERM' (proses diizinkan untuk menangani 'SIGTERM'), jadi mengirimkannya sinyal 'SIGKILL', yang membuat init mematikan program tanpa peringatan terlebih dahulu, seringkali diperlukan.Misalnya, jika
ps -fC java
kembaliatau
psgrep -a java
kembalidan Anda ingin membunuh
java TestProgram
, Anda harus larikill -9 11775
.sumber
Jika Anda ingin skrip menemukan dan membunuh program Anda yang sedang berjalan (spesifik) menggunakan pola dari baris perintah program (dan bukan hanya setiap hal java yang Anda jalankan), maka:
Dari /unix//a/31111/249209
sumber
jps
danjcmd
merupakan alat yang khusus menampilkan hanya informasi proses dan PID Java.Anda dapat menjelajahi opsi mereka untuk hasil yang lebih terperinci.
sumber
Berikut ini adalah skrip yang dapat digunakan untuk mengotomatiskan proses.
Ganti
<PROCESS_NAME>
bagian dengan apa pun yang dijalankan java.Catatan: Saya tidak meletakkan
-9
. Saya seharusnya tidak diminta kecuali Anda menangkap sinyal danSIGTERM
(default) gagal. Saya juga menyarankan Anda menggunakan nama sinyal yang membuatnya lebih mudah dibaca:PERINGATAN
Sebelum menjalankan,
kill ...
pastikan bahwa$process
variabel diatur seperti yang diharapkan. Theps -ef
Mei berbeda antara beragam Unix sehinggaawk
mungkin perlu untuk mencetak parameter yang berbeda.Catatan
Itu
<PROCESS_NAME>
bisa diubah menjadi variabel. Ingatlah bahwa jika Anda harus mengetiknya di baris perintah setiap kali, Anda mungkin akan membuat kesalahan sesekali. Saya merasa lebih mudah memiliki banyak salinan skrip dengan nama yang benar.Juga penting: perhatikan tanda kutip tunggal untuk
awk
skrip. Itu berarti Anda harus menutup dan membuka kembali string dengan variabel di antaranya. Sesuatu seperti ini seharusnya bekerja (belum diuji):sumber