Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 执行一次顶级终端代码后,如何停止它?_Java_Ubuntu_Terminal - Fatal编程技术网

Java 执行一次顶级终端代码后,如何停止它?

Java 执行一次顶级终端代码后,如何停止它?,java,ubuntu,terminal,Java,Ubuntu,Terminal,我希望看到机器的CPU和RAM利用率,直到java代码运行为止。所以我使用了top命令,但我不知道如何以及何时停止 我不知道,waitFor()如何为我工作? 我可以在一个线程中运行代码,但如何告诉它等待该线程完成执行并停止 麦可德 import...*; public class MyCode { ThreadSubclass thread1 = new ThreadSubclass(); thread1.start(); /*

我希望看到机器的CPU和RAM利用率,直到java代码运行为止。所以我使用了top命令,但我不知道如何以及何时停止

我不知道,
waitFor()
如何为我工作? 我可以在一个线程中运行代码,但如何告诉它等待该线程完成执行并停止

麦可德

import...*;

public class MyCode {

    ThreadSubclass thread1 = new ThreadSubclass();
        thread1.start();
        /*
          I want Mycode to Run in parallel while top command stores output of RAM and CPU usage.
          Can I write my code here??
          When myCode is complete, stop Top command.
        */
        System.out.println("0"); 

        Process cmdProc = Runtime.getRuntime().exec("top");
        System.out.println("1"); 
        BufferedReader stdoutReader = new BufferedReader(
                 new InputStreamReader(cmdProc.getInputStream()));
        String line;
        while ((line = stdoutReader.readLine()) != null) {
           // process procs standard output here
            System.out.println(line); 
        }
        System.out.println("2"); 
        BufferedReader stderrReader = new BufferedReader(
                 new InputStreamReader(cmdProc.getErrorStream()));
        while ((line = stderrReader.readLine()) != null) {
           // process procs standard error here
            System.out.println(line); 
        }
        cmdProc = Runtime.getRuntime().exec("Ctrl+C");
}
在另一个文件中…
ThreadSubclass.java

public class ThreadSubclass extends Thread {

    @Override
    public void run() {
       //Should I write all my code here? I had used fork earlier and it gave me pid, so It was easier for me to run my code inside that if condition of fork pid.

        System.out.println("ThreadSubclass is running");
    }

}
电流输出:

0

ThreadSubclass正在运行

一,

二,

未设置术语环境变量

预期产出:

0

ThreadSubclass正在运行

一,

二,

顶部命令输出

问题:

  • 如果我先启动“top”命令,它就不会执行其他命令
  • 如这段代码所示,当我第一次启动线程时,它显示“TERM environment variable not set”
  • 如果可能,将其直接存储在文本文件中,而不是在java代码中读取和存储

  • 如果运行
    man top
    ,则应输入参数以在批处理模式下运行,并以设定的迭代次数运行。设置top命令的固定迭代次数并没有帮助,因为我的java代码可能会运行数小时。我希望top命令仅在实际java代码停止时停止。
    top
    非常占用CPU和操作系统。连续跑几个小时是不明智的,因为这可能会影响你的表现。如果您只关心CPU和内存,为什么不针对您的java进程运行
    ps
    ?我需要分析从java调用的其他一些程序,因此我需要查看总体CPU、RAM和磁盘使用情况。哪个流程正在使用它?过程的pid也会发生变化。我需要一个更好的方式来存储这些日志,如果你有其他更好的选择这种情况。我还试图设置“sar”,如果您运行
    mantop
    ,您应该输入参数,以批处理模式运行,并以设定的迭代次数运行。设置top命令的固定迭代次数并没有帮助,因为我的java代码可能会运行数小时。我希望top命令仅在实际java代码停止时停止。
    top
    非常占用CPU和操作系统。连续跑几个小时是不明智的,因为这可能会影响你的表现。如果您只关心CPU和内存,为什么不针对您的java进程运行
    ps
    ?我需要分析从java调用的其他一些程序,因此我需要查看总体CPU、RAM和磁盘使用情况。哪个流程正在使用它?过程的pid也会发生变化。我需要一个更好的方式来存储这些日志,如果你有其他更好的选择这种情况。我也在尝试设置“sar”
    Process cmdProc = Runtime.getRuntime().exec("top -b > Top.csv");
    
    error => 
    top: unknown option '>'
    Usage:
      top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]