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