どのように私はWindowsで、子Javaプロセスを実行するだろうか?

Netherwire:

私はで書かれたWindowsプログラム持っているC(LETの言う、launcher)とに詰めたJavaFXベースのアプリケーション*jarpayload)。私は何をしたいかジェットブレーンズのあるIntelliJ IDEAの振る舞いに似た何かを達成することです。私は、タスクマネージャでは、我々はこのようなプロセスの木」や「フォルダ」を見ることができ、意味します:ウィンドウズタスクマネージャー

しかし、私の場合、私は2つの完全に独立したプロセスを参照してください。launcher.exe(のみで[Details]区間)とJava (TM) Platform SE binary[Processes]セクション(実際に、それは私ですpayload)。

私は使用していますCreateProcessW私のプロセスを生成する機能を。私のコードでは:

STARTUPINFOW info = { sizeof(info) };
PROCESS_INFORMATION processInfo;

CreateProcessW(L"C:\\Path\\To\\java.exe", L" -jar C:\\Path\\To\\payload.jar",
    NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &info, &processInfo);

どのように私はJavaアプリケーションはタスクマネージャで、より「ネイティブ」見えるようにすることができますか?私が使用していますjdk1.8.0_172手伝ってくれてありがとう。

リタハン - MSFT:

タスクマネージャに表示されるように、プロセスの木」や「フォルダ」を作成するには、次の2つの要件を満たす必要が:

  1. ツリー内の処理(アプリでグループ化された)同じプログラム/アプリケーションを実行しています。
  2. これらのプロセス間の親子関係があります。起動他のプロセスが、それらの子プロセスです親プロセスがあります。(あなたが使用することができ、親子関係を確認するにはプロセスエクスプローラのツールを。)

launcher.exeとのjava.exe(payload.jar)が親子関係を持っていますが、同じプログラム/アプリケーションではありませんが、あなたのケースのために、彼らは、タスク内のプロセスのツリー」または「フォルダ」にすることはできませんので、マネージャー。

「を参照してくださいプロセスとスレッドについて」「子プロセス

Win32コンソールアプリケーション:私は次のデモを作成するプロセスのツリー」を作成する方法を示します。(TestGroupProcesses.exe、あなたはそれがプロセスツリー内の子プロセスを作成しますEnterキーを押すたびに起動します。)

#include <windows.h>
#include <stdio.h>

int main()
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));

    printf("Press Enter to create the child process\n");

    while (getchar() != '\n');

    // Start the child process. 
    if (!CreateProcess(NULL,   // No module name (use command line)
        GetCommandLine(),        // Command line
        NULL,           // Process handle not inheritable
        NULL,           // Thread handle not inheritable
        FALSE,          // Set handle inheritance to FALSE
        0,              // No creation flags
        NULL,           // Use parent's environment block
        NULL,           // Use parent's starting directory 
        &si,            // Pointer to STARTUPINFO structure
        &pi)           // Pointer to PROCESS_INFORMATION structure
        )
    {
        printf("CreateProcess failed (%d).\n", GetLastError());
    }

    // Wait until child process exits.
    WaitForSingleObject(pi.hProcess, INFINITE);

    // Close process and thread handles. 
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
}

このようなデモを見上記により作成されたプロセスの木 ':

ここでは、画像の説明を入力します。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=227234&siteId=1