I wrote a program that uses ForkExec in Go.
command := "/bin/su -c '/bin/ls -lh / >/tmp/sC0X3kASz7' joe"
pid, err := os.ForkExec(command, []string{}, os.Environ(), "", []*os.File{nil, cmd.Stdout, cmd.Stderr})
if you execute that command on your shell, and do cat /tmp/sC0X3kASz7
you will see your files listed.
however, ForkExec above only creates the file and writes nothing in it. Any idea why that'd happen ?
go is root.
edit : command := "/bin/ls -lh / >/tmp/sC0X3kASz7"
didn't work either, just tried. it doesn't even create the /tmp file.
edit2 : command := "/bin/bash /tmp/command.txt"
and i put the above command inside this txt file, again, execute from shell, file is created, from ForkExec - nope :(
edit3 : solution is here http://code.google.com/p/go/issues/detail?id=428