コンソールウィンドウを表示するコマンドを実行し、プロセスのハンドルも取得する

注文:

数分間実行されるプロセスを開始するコマンドをJavaから実行しようとしています。コマンドをトリガーしてプロセスハンドルを取得し、ループ内の他の操作を続行する必要があります。定期的に、プロセスがまだアクティブであることを監視する必要があります。

また、ユーザーにプロセスの出力を表示するために表示するコンソールウィンドウも必要です。

現在、RuntimeクラスとProcessBuilderクラスの両方のメソッドを使用してコマンドを実行しましたが、どちらも目的を達成するのに役立ちませんでした。

サンプルコード:

//Changing the directory and running Maven exec: java command on the POM file in that directory.

String cmd = "cd C:/Test & mvn exec:java"; 
String finalCmd = "cmd /c \""+ cmd +"\"";

Process process = Runtime.getRuntime().exec(finalCmd);
Thread.sleep(10);
boolean alive = process.isAlive();

変数aliveの値はTrueですが、プロセスが開始されたようには見えません。プログラムの実行が完了すると、プロセスが開始され、なぜそれが起こるのかわかりません。

また、コンソールウィンドウを表示するには、Googleから次のコマンドを使用する必要があることがわかりました。

String finalCmd = "cmd /c start cmd.exe /c \"" + cmd + "\"";

ただし、これを使用すると、プロセスはすぐに開始されますが、alive変数がfalseを示すため、プロセスハンドルを取得できません。

誰かがこの目的を達成する方法を知っていますか?両方を同時に実行できない場合は問題ありませんが、少なくともプロセスの実行を開始し、コードの後半でプロセスの状態を監視するためのハンドルを取得する必要があります。

エゼキエル・バニアガ:

これは、WMICを使用するソリューションです。

public static void main( String[] args ) throws Exception {

    // Vars
    Process process;
    String output;

    // Execution
    process = Runtime.getRuntime().exec("cmd /c wmic process call create calc.exe | findstr ProcessId");
    output = readTrimmedOutput(process.getInputStream());
    System.out.println("Output from command: " + output);

    // Basic string manipulation to get process id
    String str_proc_id = output.split(" = ")[1].replace(";","");
    System.out.println("ProcessId is: " + str_proc_id);

    // Some thread delay that you can comment/uncomment for testing if running or not
    Thread.sleep(5000);

    // Finding if process is still running
    process = Runtime.getRuntime().exec("cmd /c wmic process get processid | findstr " + str_proc_id);
    output = readTrimmedOutput(process.getInputStream());

    boolean isRunning = output.contains(str_proc_id);
    System.out.println("Is process still running? " + isRunning);

}

private static String readTrimmedOutput(InputStream is) throws Exception {
    BufferedReader breader = new BufferedReader(new InputStreamReader(is));
    String line = breader.readLine();
    return line != null ? line.trim() : "";
}

出力例

Output from command: ProcessId = 6480;
ProcessId is: 6480
Is process still running? true

cmdコンソールを表示/表示するには、いくつかの行を次のように変更します。

// Execution
String your_command = "cmd.exe /c \"dir\"";
process = Runtime.getRuntime().exec("cmd /c wmic process call create \"" + your_command + "\" | findstr ProcessId");

参照:

https://msdn.microsoft.com/en-us/library/aa394531(v=vs.85).aspx

https://www.computerhope.com/wmic.htm

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Pythonサブプロセスを使用してコマンドを実行し、コンソールウィンドウを非表示にします

分類Dev

ウィンドウハンドルで親プロセスIDを取得する

分類Dev

新しいバックグラウンドtmuxウィンドウでコマンドを実行し、プロセスが終了するのを待ちます

分類Dev

コマンドプロンプトウィンドウでコマンドの実行を停止する方法10

分類Dev

コマンドプロンプトウィンドウでコマンドの実行を停止する方法10

分類Dev

元のウィンドウと同じプロセスで、新しいターミナルウィンドウでコマンドを実行するにはどうすればよいですか?

分類Dev

コンソールウィンドウを閉じますが、プロセスを続行します

分類Dev

WinAPI-すべてのコントロールを取得-ウィンドウのハンドル-ハンドル

分類Dev

コマンドプロンプトですでに実行中のWindowsプロセスのコンソール出力を取得しますか?StreamReaderをコマンドプロンプトに転送する

分類Dev

別の(新しい)ターミナルウィンドウでコマンドを実行する

分類Dev

コンソールウィンドウの同じ領域でコマンドを実行し続けるにはどうすればよいですか?( "w")

分類Dev

.pywスクリプトの実行からPythonコンソールウィンドウを起動します

分類Dev

IntelliJCEのMavenゴールウィンドウの実行で前の「コマンドライン」のリストをクリーンアップする方法

分類Dev

アイスウィーゼルの代わりにダウンロードしたFirefoxをFirefoxコマンドで実行する

分類Dev

Inno Setupでコマンドを実行した後、コンソールウィンドウを維持するにはどうすればよいですか?

分類Dev

pyinstallerでウィンドウとコンソールの両方を表示する

分類Dev

C ++でKeyloggerのコンソールウィンドウを非表示にする

分類Dev

UNIXターミナルのすべてのウィンドウで同じコマンドを実行する

分類Dev

PythonでLinuxコンソールウィンドウの幅を取得する方法

分類Dev

プロセスの実行中にウィンドウにタイマーを表示する

分類Dev

非表示のコマンドウィンドウでcmdコマンドを実行する

分類Dev

実行中のプロセスの進行状況をモーダルウィンドウに表示します

分類Dev

WPFウィンドウに任意のコントロールを表示する

分類Dev

bashからターミナルウィンドウで複数のコマンドを実行する

分類Dev

xshellでscreenコマンドを使用してバックグラウンドプロセスを実行する

分類Dev

xshellでscreenコマンドを使用してバックグラウンドプロセスを実行する

分類Dev

Pythonは、コンソールウィンドウを開かずに.exeとしてプロセスを実行します

分類Dev

(C ++、Windows)コンソールウィンドウなしで子プロセスを生成します(CreateProcessを使用)

分類Dev

ac#プログラムでsqlcmdプロセスを実行しているときにコマンドウィンドウに情報を出力する

Related 関連記事

  1. 1

    Pythonサブプロセスを使用してコマンドを実行し、コンソールウィンドウを非表示にします

  2. 2

    ウィンドウハンドルで親プロセスIDを取得する

  3. 3

    新しいバックグラウンドtmuxウィンドウでコマンドを実行し、プロセスが終了するのを待ちます

  4. 4

    コマンドプロンプトウィンドウでコマンドの実行を停止する方法10

  5. 5

    コマンドプロンプトウィンドウでコマンドの実行を停止する方法10

  6. 6

    元のウィンドウと同じプロセスで、新しいターミナルウィンドウでコマンドを実行するにはどうすればよいですか?

  7. 7

    コンソールウィンドウを閉じますが、プロセスを続行します

  8. 8

    WinAPI-すべてのコントロールを取得-ウィンドウのハンドル-ハンドル

  9. 9

    コマンドプロンプトですでに実行中のWindowsプロセスのコンソール出力を取得しますか?StreamReaderをコマンドプロンプトに転送する

  10. 10

    別の(新しい)ターミナルウィンドウでコマンドを実行する

  11. 11

    コンソールウィンドウの同じ領域でコマンドを実行し続けるにはどうすればよいですか?( "w")

  12. 12

    .pywスクリプトの実行からPythonコンソールウィンドウを起動します

  13. 13

    IntelliJCEのMavenゴールウィンドウの実行で前の「コマンドライン」のリストをクリーンアップする方法

  14. 14

    アイスウィーゼルの代わりにダウンロードしたFirefoxをFirefoxコマンドで実行する

  15. 15

    Inno Setupでコマンドを実行した後、コンソールウィンドウを維持するにはどうすればよいですか?

  16. 16

    pyinstallerでウィンドウとコンソールの両方を表示する

  17. 17

    C ++でKeyloggerのコンソールウィンドウを非表示にする

  18. 18

    UNIXターミナルのすべてのウィンドウで同じコマンドを実行する

  19. 19

    PythonでLinuxコンソールウィンドウの幅を取得する方法

  20. 20

    プロセスの実行中にウィンドウにタイマーを表示する

  21. 21

    非表示のコマンドウィンドウでcmdコマンドを実行する

  22. 22

    実行中のプロセスの進行状況をモーダルウィンドウに表示します

  23. 23

    WPFウィンドウに任意のコントロールを表示する

  24. 24

    bashからターミナルウィンドウで複数のコマンドを実行する

  25. 25

    xshellでscreenコマンドを使用してバックグラウンドプロセスを実行する

  26. 26

    xshellでscreenコマンドを使用してバックグラウンドプロセスを実行する

  27. 27

    Pythonは、コンソールウィンドウを開かずに.exeとしてプロセスを実行します

  28. 28

    (C ++、Windows)コンソールウィンドウなしで子プロセスを生成します(CreateProcessを使用)

  29. 29

    ac#プログラムでsqlcmdプロセスを実行しているときにコマンドウィンドウに情報を出力する

ホットタグ

アーカイブ