Kerrigan29a/recipe

View on GitHub
task_windows.go

Summary

Maintainability
A
35 mins
Test Coverage
// +build windows

/*
 * Sources:
 * - https://github.com/mattn/goreman/blob/master/proc_windows.go
 * - https://github.com/golang/dep/issues/862
 * - https://github.com/alexbrainman/ps
 */

package recipe

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

func (t *Task) composeDefaultInterpreterCmd(spell string) []string {
    return []string{"cmd", "/c", spell}
}

func (t *Task) setSysProcAttr() {
    t.cmd.SysProcAttr = &syscall.SysProcAttr{
        CreationFlags: syscall.CREATE_UNICODE_ENVIRONMENT | syscall.CREATE_NEW_PROCESS_GROUP,
    }
}

func (t *Task) Terminate() error {
    cmd := t.cmd
    if cmd == nil {
        return nil
    }
    p := cmd.Process
    if p == nil {
        return nil
    }

    // TODO: Use a better way. Probably using https://github.com/alexbrainman/ps
    // Search program
    path, err := exec.LookPath("taskkill")
    if err != nil {
        return err
    }
    err = exec.Command(path, "/F", "/T", "/PID", fmt.Sprint(p.Pid)).Run()
    if err != nil {
        return err
    }
    return nil
}