簡體   English   中英

獲得正在運行的服務(LINUX JAVA):如何僅解析服務名稱?

[英]Getting running services (LINUX JAVA): how to parse service name only?

我正在嘗試獲取linux機器的運行服務。 我已經打印了它們,但是我只想獲得服務名稱。 我的代碼:

   public void runningservices()
{

    try {
        String line;
        Process p = Runtime.getRuntime().exec("ps -e");
        BufferedReader input =
                new BufferedReader(new InputStreamReader(p.getInputStream()));
        while ((line = input.readLine()) != null) {

            System.out.println(line); //<-- Parse data here.

        }
        input.close();
    } catch (Exception err) {
        err.printStackTrace();
    }

}

我得到這種格式的結果:

  PID TTY          TIME CMD
    1 ?        00:00:46 init
    2 ?        00:00:00 migration/0
    3 ?        00:00:00 ksoftirqd/0
    4 ?        00:00:00 watchdog/0
    5 ?        00:00:00 events/0
    6 ?        00:00:00 khelper
    7 ?        00:00:00 kthread
    9 ?        00:00:00 xenwatch
   10 ?        00:00:00 xenbus
   12 ?        00:00:05 kblockd/0
   13 ?        00:00:00 kacpid
  176 ?        00:00:00 cqueue/0
  180 ?        00:00:00 khubd
  182 ?        00:00:00 kseriod
  246 ?        00:00:00 khungtaskd
  247 ?        00:00:00 pdflush
  248 ?        00:00:01 pdflush
  249 ?        00:00:00 kswapd0
  250 ?        00:00:00 aio/0
  457 ?        00:00:00 kpsmoused
  485 ?        00:00:00 mpt_poll_0
  486 ?        00:00:00 mpt/0
  487 ?        00:00:00 scsi_eh_0
  490 ?        00:00:00 ata/0
  491 ?        00:00:00 ata_aux
  496 ?        00:00:00 kstriped
  505 ?        00:00:00 ksnapd
  516 ?        00:00:12 kjournald
  547 ?        00:00:00 kauditd
  580 ?        00:00:03 udevd
 1865 ?        00:00:00 kmpathd/0
 1866 ?        00:00:00 kmpath_handlerd
 1925 ?        00:00:00 kjournald

但我想要這樣:

init
migration
ksoftirqd
watchdog
events
khelper
kthread
xenwatch
xenbus
kblockd
kacpid
cqueue
khubd
kseriod
khungtaskd
pdflush
pdflush
kswapd0
aio
kpsmoused
mpt_poll_0
mpt
scsi_eh_0
ata
ata_aux
kstriped
ksnapd
kjournald
kauditd
udevd
kmpathd
kmpath_handlerd
kjournald

我將如何解析? 提前致謝。

代替解析輸出,我將使用man ps查找ps參數。

從那里可以看到用戶定義輸出的一部分。

To see every process with a user-defined format:
          ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
          ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
          ps -eopid,tt,user,fname,tmout,f,wchan 

對於您的情況,運行此方法將是答案。

ps -eo comm

取串的長度和從的IndexOf(長度-1)高達第一空間向后獲得的字符。

Java風格:

 while ((line = input.readLine()) != null) {

        String[] split = line.split(" ");
        System.out.println(split[split.length-1]);

}

將命令更改為

ps -e | awk '{print $4}'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM