agent/pluginmanager/pluginmanager_unix.go (44 lines of code) (raw):
// +build linux freebsd
package pluginmanager
import (
"github.com/aliyun/aliyun_assist_client/agent/util/process"
"github.com/aliyun/aliyun_assist_client/agent/log"
"github.com/aliyun/aliyun_assist_client/agent/util/osutil"
"io"
"syscall"
"strings"
)
func syncRunKillGroup(workingDir string, commandName string, commandArguments []string, stdoutWriter io.Writer, stderrWriter io.Writer,
timeOut int) (exitCode int, status int, err error) {
processCmd := process.NewProcessCmd()
// SyncRun 中设置了进程组id和新起的进程id一致。SyncRun返回后调用系统调用kill掉进程组
exitCode, status, err = processCmd.SyncRun(workingDir, commandName, commandArguments, stdoutWriter, stderrWriter, nil, nil, timeOut)
log.GetLogger().Infof("syncRunKillGroup: done, workingDir[%s] commandName[%s] commandArguments[%s] timeout[%d]", workingDir, commandName, strings.Join(commandArguments, " "), timeOut)
if exitCode != 0 || status != process.Success || err != nil {
log.GetLogger().Errorf("syncRunKillGroup: exitCode[%d] status[%d] err[%v], not success, will kill all child process", exitCode, status, err)
_ = syscall.Kill(-(processCmd.Pid()), syscall.SIGKILL)
}
return exitCode, status, err
}
func GetArch() (formatArch string, rawArch string) {
defer func() {
log.GetLogger().Infof("Get Arch: formatArch[%s] rawArch[%s]: ", formatArch, rawArch)
}()
formatArch = ARCH_UNKNOWN
arch, err := osutil.GetUnameMachine()
if err != nil {
log.GetLogger().Errorln("Get Arch: GetUnameMachine err: ", err.Error())
}
arch = strings.TrimSpace(arch)
arch = strings.ToLower(arch)
rawArch = arch
if strings.Contains(arch, "aarch") || strings.Contains(arch, "arm") { // arm: aarch arm
formatArch = ARCH_ARM
} else if strings.Contains(arch, "386") || strings.Contains(arch, "686") { // x86: i386 i686
formatArch = ARCH_32
} else if arch == "x86_64" || arch == "amd64" { // x64: x86_64
formatArch = ARCH_64
} else {
log.GetLogger().Errorln("Get Arch: unknown arch: ", arch)
formatArch = ARCH_UNKNOWN
}
return
}