Как я могу получить список текущих запущенных процессов в Go?
Пакет ОС предоставляет некоторые функции: http://golang.org/pkg/os/, но ничего не дает, чтобы увидеть список запущенных процессов.
Как я могу получить список текущих запущенных процессов в Go?
Пакет ОС предоставляет некоторые функции: http://golang.org/pkg/os/, но ничего не дает, чтобы увидеть список запущенных процессов.
В стандартной библиотеке такой функции нет и, скорее всего, никогда не будет.
В большинстве случаев список процессов не требуется для программ. Обычно программы Go хотят ждать одиночного или меньшего количества процессов, а не для всех процессов. PIDs процессов обычно получают другими способами, чем поиск списка всех процессов.
Если вы работаете в Linux, список процессов можно получить, прочитав содержимое каталога /proc
. См. Вопрос API Linux для отображения запущенных процессов?
Если вам нужна только информация о процессе, вы можете просто запустить команду "ps" из вашего кода go, а затем проанализировать вывод текста.
Полное решение может относиться к упражнению 29 в книге "Learning Go" @http://www.miek.nl/files/go/
Я предлагаю использовать для этого следующую библиотеку: 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)
}
Библиотека позволяет получить несколько других данных. Взгляните на документацию для получения доступной информации в соответствии с целевой операционной системой.
Эта библиотека: 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
}
}