mirror of https://github.com/shunfei/cronsun
Force kill a group of processes
parent
bf22fa82cc
commit
d045b2631c
17
job.go
17
job.go
|
@ -422,13 +422,11 @@ func (j *Job) Run() bool {
|
||||||
|
|
||||||
t := time.Now()
|
t := time.Now()
|
||||||
|
|
||||||
if len(j.User) > 0 {
|
|
||||||
sysProcAttr, err = j.CreateCmdAttr()
|
sysProcAttr, err = j.CreateCmdAttr()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
j.Fail(t, err.Error())
|
j.Fail(t, err.Error())
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// 超时控制
|
// 超时控制
|
||||||
if j.Timeout > 0 {
|
if j.Timeout > 0 {
|
||||||
|
@ -438,6 +436,7 @@ func (j *Job) Run() bool {
|
||||||
} else {
|
} else {
|
||||||
cmd = exec.Command(j.cmd[0], j.cmd[1:]...)
|
cmd = exec.Command(j.cmd[0], j.cmd[1:]...)
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd.SysProcAttr = sysProcAttr
|
cmd.SysProcAttr = sysProcAttr
|
||||||
var b bytes.Buffer
|
var b bytes.Buffer
|
||||||
cmd.Stdout = &b
|
cmd.Stdout = &b
|
||||||
|
@ -713,7 +712,13 @@ func (j *Job) ShortName() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (j *Job) CreateCmdAttr() (*syscall.SysProcAttr, error) {
|
func (j *Job) CreateCmdAttr() (*syscall.SysProcAttr, error) {
|
||||||
var sysProcAttr *syscall.SysProcAttr
|
sysProcAttr := &syscall.SysProcAttr{
|
||||||
|
Setpgid: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(j.User) == 0 {
|
||||||
|
return sysProcAttr, nil
|
||||||
|
}
|
||||||
|
|
||||||
u, err := user.Lookup(j.User)
|
u, err := user.Lookup(j.User)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -724,15 +729,15 @@ func (j *Job) CreateCmdAttr() (*syscall.SysProcAttr, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.New("not support run with user on windows")
|
return nil, errors.New("not support run with user on windows")
|
||||||
}
|
}
|
||||||
|
|
||||||
if uid != _Uid {
|
if uid != _Uid {
|
||||||
gid, _ := strconv.Atoi(u.Gid)
|
gid, _ := strconv.Atoi(u.Gid)
|
||||||
sysProcAttr = &syscall.SysProcAttr{
|
sysProcAttr.Credential = &syscall.Credential{
|
||||||
Credential: &syscall.Credential{
|
|
||||||
Uid: uint32(uid),
|
Uid: uint32(uid),
|
||||||
Gid: uint32(gid),
|
Gid: uint32(gid),
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return sysProcAttr, nil
|
return sysProcAttr, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -423,7 +423,7 @@ func (n *Node) groupRmNode(g, og *cronsun.Group) {
|
||||||
|
|
||||||
func (n *Node) KillExcutingProc(process *cronsun.Process) {
|
func (n *Node) KillExcutingProc(process *cronsun.Process) {
|
||||||
pid, _ := strconv.Atoi(process.ID)
|
pid, _ := strconv.Atoi(process.ID)
|
||||||
if err := syscall.Kill(pid, syscall.SIGKILL); err != nil {
|
if err := syscall.Kill(-pid, syscall.SIGKILL); err != nil {
|
||||||
log.Warnf("process:[%d] force kill failed, error:[%s]\n", pid, err)
|
log.Warnf("process:[%d] force kill failed, error:[%s]\n", pid, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue