Bir Spring JMSListener aracılığıyla başlatılan bir işlem var. İşlem, bir görüntünün yeniden işlenmesini yapmak için imagemagick'i çağırmak üzere temel olarak bir Runtime exe çalıştırır. * Nix altında, Runtime exec komutu çıkış kodu 0 ile çıkılsa da ve hiçbir istisna atılmadığı halde kalan iş parçacıkları vardır. Uygulama, çalışmasını gerçekleştirmek için Gythio Runtime Exec sınıf kullanıyor. StthErr ve StdOut etrafındaki olağan tuzaklar, Gythio'nun doğru bir şekilde işlediği Runtime ile ortaya çıkamazsa, başarılı olmasına rağmen süreci imha etmemeliyiz?İşlem, çıkış kodu 0 ile bittiğinde Process.destroy() yöntemini çağırmalı mıyım?
İşte basit bir örnek, kod hatalarını görmezden gelmeyin, gerçek kod olması gerekmez. Sorum // işlemi yapılır blok etrafında ise:
çalışan yaklaşık bir saat sonra, tomcat çalışan uygulama bu konuları gösterirpublic class Test {
public void doSomething(String cmd, String processProperties, String processDirectory){
try {
// cmd is something like convert ... file .. params
Runtime runtime = Runtime.getRuntime();
final Process process = runtime.exec(cmd, processProperties, processDirectory);
int exitValue = process.waitFor();
System.out.println("exit value: " + exitValue);
BufferedReader buf = new BufferedReader(new InputStreamReader(
process.getInputStream()));
String line = "";
while ((line = buf.readLine()) != null) {
System.out.println("exec response: " + line);
//log = line;
//writeToFile(line);
}
// process is done... should it be destroyed?
if(process != null){
process.destroy();
}
// end process done
} catch (Exception e) {
System.out.println(e);
}
}
}
(erkek kedi pid 1641 olduğu):
[[email protected] logs]# top -H -p 1641
top - 19:45:24 up 264 days, 10:33, 4 users, load average: 0.00, 0.00, 0.19
Tasks: 5068 total, 0 running, 5068 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.7%us, 1.5%sy, 0.0%ni, 97.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 8061332k total, 6690912k used, 1370420k free, 195348k buffers
Swap: 1888252k total, 77672k used, 1810580k free, 5070148k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1734 adminuser 20 0 5842m 948m 13m S 0.3 12.0 3:03.41 java
1641 adminuser 20 0 5842m 948m 13m S 0.0 12.0 0:00.00 java
1643 adminuser 20 0 5842m 948m 13m S 0.0 12.0 0:01.20 java
1644 adminuser 20 0 5842m 948m 13m S 0.0 12.0 0:02.31 java
1671 adminuser 20 0 5842m 948m 13m S 0.0 12.0 0:02.28 java
1678 adminuser 20 0 5842m 948m 13m S 0.0 12.0 0:02.35 java
1686 adminuser 20 0 5842m 948m 13m S 0.0 12.0 0:02.20 java
1687 adminuser 20 0 5842m 948m 13m S 0.0 12.0 2:25.66 java
1688 adminuser 20 0 5842m 948m 13m S 0.0 12.0 0:00.11 java
1691 adminuser 20 0 5842m 948m 13m S 0.0 12.0 0:00.08 java
1706 adminuser 20 0 5842m 948m 13m S 0.0 12.0 0:00.00 java
1712 adminuser 20 0 5842m 948m 13m S 0.0 12.0 0:53.24 java
1720 adminuser 20 0 5842m 948m 13m S 0.0 12.0 0:39.38 java
1721 adminuser 20 0 5842m 948m 13m S 0.0 12.0 0:12.96 java
1722 adminuser 20 0 5842m 948m 13m S 0.0 12.0 0:00.00 java
1723 adminuser 20 0 5842m 948m 13m S 0.0 12.0 2:54.47 java
1724 adminuser 20 0 5842m 948m 13m S 0.0 12.0 0:00.00 java
1728 adminuser 20 0 5842m 948m 13m S 0.0 12.0 0:03.62 java
1729 adminuser 20 0 5842m 948m 13m S 0.0 12.0 0:08.16 java
1731 adminuser 20 0 5842m 948m 13m S 0.0 12.0 0:00.75 java
1732 adminuser 20 0 5842m 948m 13m S 0.0 12.0 0:02.58 java
1735 adminuser 20 0 5842m 948m 13m S 0.0 12.0 3:03.63 java
1736 adminuser 20 0 5842m 948m 13m S 0.0 12.0 3:02.23 java
1737 adminuser 20 0 5842m 948m 13m S 0.0 12.0 3:00.92 java
1738 adminuser 20 0 5842m 948m 13m S 0.0 12.0 3:03.59 java
1739 adminuser 20 0 5842m 948m 13m S 0.0 12.0 3:02.96 java
1740 adminuser 20 0 5842m 948m 13m S 0.0 12.0 3:05.07 java
1741 adminuser 20 0 5842m 948m 13m S 0.0 12.0 3:02.26 java
1742 adminuser 20 0 5842m 948m 13m S 0.0 12.0 3:04.57 java
1743 adminuser 20 0 5842m 948m 13m S 0.0 12.0 3:01.79 java
1744 adminuser 20 0 5842m 948m 13m S 0.0 12.0 0:26.27 java
1745 adminuser 20 0 5842m 948m 13m S 0.0 12.0 0:00.10 java
1746 adminuser 20 0 5842m 948m 13m S 0.0 12.0 0:10.72 java
1747 adminuser 20 0 5842m 948m 13m S 0.0 12.0 0:00.00 java
1748 adminuser 20 0 5842m 948m 13m S 0.0 12.0 0:10.99 java
5611 adminuser 20 0 5842m 948m 13m S 0.0 12.0 0:00.68 java
5620 adminuser 20 0 5842m 948m 13m S 0.0 12.0 0:00.36 java
Herhangi/tüm cevaplar takdir edilir! Şimdiden teşekkürler!
Akışı kapatırsanız (örneğin, kaynak kullanmayı deneyerek) temizlenirler mi? –
Gerekli olması gerektiğini düşünemezsiniz. İşlemin, çıkış() çıkışını döndürdüğünü veya ana bilgisayardan çıktığını düşünürseniz, yok edecek bir işlem bulunmadığını düşünürdünüz. – EJP
Bir program bitmeden ve program kapanana kadar çıkamaz (veya bir çıkış kodunu döndüremez). Bu sınıfı düşünce burada –