Список текущих процессов в Go - PullRequest
16 голосов
/ 27 января 2012

Как я могу получить список запущенных в настоящий момент процессов в Go?

Пакет ОС предоставляет некоторые функции: http://golang.org/pkg/os/, но ничего не дает, чтобы увидеть список запущенных процессов.

Ответы [ 4 ]

18 голосов
/ 27 января 2012

В стандартной библиотеке такой функции нет и, скорее всего, никогда не будет.

В большинстве случаев список процессов не требуется программам.Программы Go обычно хотят ждать одного или меньшего числа процессов, а не всех процессов.PID процессов обычно получают другими способами, кроме поиска в списке всех процессов.

Если вы работаете в Linux, список процессов можно получить, прочитав содержимое каталога /proc.См. Вопрос Linux API для просмотра списка запущенных процессов?

4 голосов
/ 12 июня 2012

Если вам нужна только информация о процессе, вы можете просто запустить команду "ps" из вашего кода go, а затем проанализировать вывод текста.

Полное решение может относиться к Упражнению 29 в Книге "Обучение учиться" @ http://www.miek.nl/files/go/

1 голос
/ 29 ноября 2018

Я предлагаю использовать для этой цели следующую библиотеку: https://github.com/shirou/gopsutil/

Вот пример для получения общих и запущенных процессов:

package main

import (
    "fmt"
    "github.com/shirou/gopsutil/host"
    "github.com/shirou/gopsutil/load"
)

func main() {
    infoStat, _ := host.Info()
    fmt.Printf("Total processes: %d\n", infoStat.Procs)

    miscStat, _ := load.Misc()
    fmt.Printf("Running processes: %d\n", miscStat.ProcsRunning)
}

Библиотека позволяет получить несколькодругие данные.Взгляните на документацию для получения доступной информации в соответствии с целевой операционной системой.

0 голосов
/ 14 мая 2019

Эта библиотека: github.com/mitchellh/go-ps работала для меня.

import (
      ps "github.com/mitchellh/go-ps"
      ... // other imports here...
)

func whatever(){
    processList, err := ps.Processes()
    if err != nil {
        log.Println("ps.Processes() Failed, are you using windows?")
        return
    }

    // map ages
    for x := range processList {
        var process ps.Process
        process = processList[x]
        log.Printf("%d\t%s\n",process.Pid(),process.Executable())

        // do os.* stuff on the pid
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...