bug fix
This commit is contained in:
parent
d981a03b14
commit
3501166592
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
.idea
|
||||
.vscode
|
@ -28,7 +28,6 @@ type StarCmd struct {
|
||||
errout []byte
|
||||
runerr error
|
||||
exitcode int
|
||||
customCtx context.Context
|
||||
stdoutBuf *bytes.Buffer
|
||||
stderrBuf *bytes.Buffer
|
||||
stdoutpoint int
|
||||
@ -314,9 +313,13 @@ func (starcli *StarCmd) ExitCode() int {
|
||||
return starcli.exitcode
|
||||
}
|
||||
|
||||
func (starcli *StarCmd) Kill() {
|
||||
starcli.CMD.Process.Kill()
|
||||
func (starcli *StarCmd) Kill() error{
|
||||
err:=starcli.CMD.Process.Kill()
|
||||
if err!=nil{
|
||||
return err
|
||||
}
|
||||
starcli.running = false
|
||||
return nil
|
||||
}
|
||||
|
||||
func (starcli *StarCmd) GetPid() int {
|
||||
|
@ -283,25 +283,49 @@ func Daemon(path string, args ...string) (int, error) {
|
||||
return pid, err
|
||||
}
|
||||
|
||||
func (starcli *StarCmd) SetRunUser(uid, gid uint32) {
|
||||
func DaemonWithUser(uid, gid uint32,groups []uint32,path string, args ...string) (int, error) {
|
||||
cmd := exec.Command(path, args...)
|
||||
cmd.SysProcAttr = &syscall.SysProcAttr{
|
||||
Credential: &syscall.Credential{
|
||||
Uid: uid,
|
||||
Gid: gid,
|
||||
Groups: groups,
|
||||
},
|
||||
Setsid: true,
|
||||
}
|
||||
if err := cmd.Start(); err != nil {
|
||||
return -1, err
|
||||
}
|
||||
pid := cmd.Process.Pid
|
||||
err := cmd.Process.Release()
|
||||
return pid, err
|
||||
}
|
||||
|
||||
func (starcli *StarCmd) SetRunUser(uid, gid uint32,groups []uint32) {
|
||||
starcli.CMD.SysProcAttr = &syscall.SysProcAttr{
|
||||
Credential: &syscall.Credential{
|
||||
Uid: uid,
|
||||
Gid: gid,
|
||||
Groups: groups,
|
||||
},
|
||||
Setsid: true,
|
||||
}
|
||||
}
|
||||
|
||||
func (starcli *StarCmd) Release() error {
|
||||
if err := starcli.CMD.Start(); err != nil {
|
||||
return err
|
||||
if starcli.CMD.SysProcAttr == nil {
|
||||
starcli.CMD.SysProcAttr = &syscall.SysProcAttr{
|
||||
Setsid: true,
|
||||
}
|
||||
} else {
|
||||
starcli.CMD.SysProcAttr.Setsid = true
|
||||
}
|
||||
starcli.CMD.SysProcAttr = &syscall.SysProcAttr{
|
||||
Setsid: true,
|
||||
if !starcli.IsRunning() {
|
||||
if err := starcli.CMD.Start(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
starcli.CMD.Process.Release()
|
||||
return nil
|
||||
return starcli.CMD.Process.Release()
|
||||
}
|
||||
|
||||
func (starcli *StarCmd) SetKeepCaps() error {
|
||||
@ -311,3 +335,11 @@ func (starcli *StarCmd) SetKeepCaps() error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func SetKeepCaps() error {
|
||||
_, _, err := syscall.RawSyscall(157 /*SYS PRCTL */, 0x8 /*PR SET KEEPCAPS*/, 1, 0)
|
||||
if 0 != err {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user