Получение запущенных сервисов (LINUX JAVA): как разобрать только имя сервиса? - PullRequest
2 голосов
/ 09 марта 2012

Я пытаюсь получить работающие службы 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

Как мне разобратьЭто?Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 09 марта 2012

Возьмите длину строки line и верните символы назад от IndexOf (length-1) до первого пробела.

2 голосов
/ 09 марта 2012

Вместо анализа выходных данных я бы посмотрел ps аргументы с man 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
1 голос
/ 09 марта 2012

Java стиль:

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

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

}
0 голосов
/ 09 марта 2012

измените вашу команду на

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