-2

I run go run main.go as root, but I want to execute top in main.go as a normal user.

# main.go
package main

import (
    "context"
    "fmt"
    "os"
    "os/exec"
)

func run() {
    cmd := exec.CommandContext(context.TODO(), "bash", "-c", "top")
    cmd.Stdin = os.Stdin
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr
    err := cmd.Run()
    if err != nil {
        fmt.Println(
            cmd.ProcessState.Success())
        return
    }
    fmt.Println(
        cmd.ProcessState.Success())
}

func main() {
    run()
}

How can I do this?

Mark Rotteveel
  • 100,966
  • 191
  • 140
  • 197
Yan Tao
  • 7
  • 1

2 Answers2

0

Try this:

package main

import (
    "fmt"
    "log"
    "os/exec"
)

func main() {

    out, err := exec.Command("sudo", "-u", "YOURUSERNAME", "top", "-n", "1", "-b").Output()

    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(string(out))
}

krasnosvar
  • 101
  • 4
0

try execute command like this:

su fakeuser -c 'top -u `whoami`'
HALF9000
  • 518
  • 2
  • 14