Java işlemlerini sonlandır


25

Hesaplamalı ağır bir kod üzerinde çalışıyorum - şimdilik - çok fazla çöküyor, ama hala üzerinde çalışıyorum :) Çöküyorsa, GUI penceresini kapatamıyorum; Bir kabuk açıp işlemi -9 öldürmem gerekiyor.

Bir Java işlemidir ve bulmak kolaydır:

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

Şimdi kolay ama oldukça mekanik bir iştir. Normalde yaklaşık 7-8 işlemin çökmesini ve sonra kill -9bunların her birini beklerim .

Bunu otomatik olarak yapmak istiyorum. Bazı (n-1) sonuçların kimliğini almak ps aux | grep javave onu öldürmek için bazı komutları aktarmanın kolay olması gerektiğini düşünüyorum ama nereden başlayacağımı bilmiyorum.

Biri bana herhangi bir ipucu verebilir mi?

Yanıtlar:


22

Birkaç boru daha seni olmak istediğin yere götürür. İşte nasıl yaparım:

search_terms='whatever will help find the specific process' 

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

İşte neler oluyor:

grep -v 'grep' grep işlemini sonuçların dışında tutar.

awk '{print $2}' Çıktının yalnızca 2. sütununu yazdırır (bu durumda PID)

$(...)komut değiştirmedir. Temel olarak, iç komuttan elde edilen sonuç argüman olarak kullanılacaktır.kill

Bunun neyin öldürüldüğü üzerinde daha iyi kontrol sahibi olması avantajına sahiptir. Örneğin, paylaşılan bir sistemdeyseniz arama terimlerini düzenleyebilirsiniz, böylece yalnızca kendi java işlemlerinizi öldürmeye çalışır.


49

Eğer adlandırılmış bütün işlemleri öldürmek javaistiyorsanız, aşağıdaki komutu kullanabilirsiniz:

Killall -9 Java

Bu komut, isimleriyle tanımlanan işlemlere sinyaller gönderir.


killall javaÇözemediğim rastgele bir nedenden dolayı benim için çalışmıyordu. -9Parametre sorunu çözmüştü. Teşekkür ederim.
Paul Nelson Baker

5
9, SIGKILL'dir. Program onu ​​görmezden gelemez ve temel olarak şöyle der: Kendinizi şimdi sonlandırın.
Milan Todorovic

IntelliJ kullanıcıları, IDE’lerinin Tomcat’ten ve diğer pek çok uygulamadan bahsetmediğini düştü. Bu kaba bir yöntemdir ve hizmetlere veya verimlilik uygulamalarına dayanan herhangi bir sistemde önerilmez java.
tresf

3

Bir metin editörü açın ve bu kısa bash betiğini ev dizininize 'killjava' olarak kaydedin.

#! /bin/bash

# Kill Java process

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

kill -9 $PID

Sonra chmod u+x ~/killjavabir terminalde böylece dosyayı çalıştırabilirsiniz.

Öyleyse sadece ~/killjavabir terminalden arayabilir ve Java işleminiz ölmüş olur. Java işleminden bu şekilde öldürdüğünüz hangi kaynakların (örneğin veritabanı bağlantıları) etkileneceğini düşünebilirsiniz. Örneğin, belki kill -15de daha uygun olurdu - açıklamayı buradan görebilirsiniz .


2

İşte Dean'in önceki cevabına dayanan alternatif bir yaklaşım.

Bu , java işlemini tanımlamak için jps'yi kullanır .

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

MainClass çalışan java programınızdaki ana yöntemi içeren bir sınıftır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.