Giriş
Runtime sınıfı erişilebilir bir constructor vermiyor. getInstance () çağrısı ile nesneyi yaratıyoruz.
addShutdownHook metodu
Açıklaması şöyle. Ctrl + C ile uygulamayı kapatmak içindir. Bu metod içinde System.out.println() yapılabilir.
Runtime sınıfı erişilebilir bir constructor vermiyor. getInstance () çağrısı ile nesneyi yaratıyoruz.
addShutdownHook metodu
Açıklaması şöyle. Ctrl + C ile uygulamayı kapatmak içindir. Bu metod içinde System.out.println() yapılabilir.
The Java virtual machine shuts down in response to two kinds of events:
The program exits normally, when the last non-daemon thread exits or when the exit (equivalently, System.exit) method is invoked, or The virtual machine is terminated in response to a user interrupt, such as typing Ctrl+C or a system-wide event, such as user logoff or system shutdown.
- Ctrl +C Linux'ta SIGINT sinyali gönderir.
- Ancak Windows'ta java -jar ile başlatılan uygulamayı konsol penceresinden kapatınca CTRL-CLOSE
gönderilir. addShutdownHook metodu bu sinyali yakalamaz. Bir çözüm burada.
Şöyle yaparız.
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
...
executorPool.shutdown();
logger.info("Shutdown executorPool");
}));
availableProcessors metoduRuntime.getRuntime().availableProcessors();
exec metodu
Java kullanarak bir başka uygulamayı çalıştırmak için Runtime.exec() veya ProcessBuilder sınıfını kullanmak lazım. Her iki sınıf ta Process nesnesi ürettiği için geri kalan işlemler aslında hemen hemen aynı.
Runtime.exec() hata olursa exception atmaz. Process.exitValue() veya Process.getInputStream() metodları ile hatayı anlamak mümkün olabilir.
exec metodu - string
Örnek
ps komutu çalıştırmak için şöyle yaparız.
Şöyle yaparız.
Bat Dosyası Çalıştırma yazısına taşıdım.
exec metodu - string []
Java kullanarak bir başka uygulamayı çalıştırmak için Runtime.exec() veya ProcessBuilder sınıfını kullanmak lazım. Her iki sınıf ta Process nesnesi ürettiği için geri kalan işlemler aslında hemen hemen aynı.
Runtime.exec() hata olursa exception atmaz. Process.exitValue() veya Process.getInputStream() metodları ile hatayı anlamak mümkün olabilir.
exec metodu - string
Örnek
ps komutu çalıştırmak için şöyle yaparız.
Process process = Runtime.getRuntime().exec("ps x");
Örnek - komut satırıŞöyle yaparız.
Runtime run = Runtime.getRuntime();
Process pr = run.exec("cmd /c del /s/q c:\\mydirectory");
pr.waitFor();
Örnek - bat dosyasıBat Dosyası Çalıştırma yazısına taşıdım.
exec metodu - string []
Örnek - array
Şöyle yaparız.
String[] cmd = ...;
Process p = Runtime.getRuntime().exec(cmd);
Örnek - pipe Şöyle yaparız.
String[] cmd = {
"/bin/sh",
"-c",
"ls /etc | grep release"
};
Process p = Runtime.getRuntime().exec(cmd);
exec - command + environment + working directoryMetodun imzası şöyle
exec(String[] cmdarray, String[] envp, File dir)
Üçüncü parametre uygulamanın "working directory" dizinini belirtir. Eğer null verilirse yeni uygulama kendisini yaratan uygulamanın "working directory" alanını kullanılır.
Bat dosyasına "working directory" vermek için şöyle yaparız.
Runtime.exec("C:\mydir\myfile.bat", null, new File("C:\mydir"));
Hiç yorum yok:
Yorum Gönder