Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 过程不';在cmd.Process.Kill()调用后不会死亡_Go - Fatal编程技术网

Go 过程不';在cmd.Process.Kill()调用后不会死亡

Go 过程不';在cmd.Process.Kill()调用后不会死亡,go,Go,我有一个跟踪文件更改的程序,应该在文件更改时重新启动指定的进程 我使用cmd.Process.Kill()终止前一个进程,但调用Kill()后它仍保持活动状态 与“从项目开始”流程相关的一些代码: //ShellPlugin允许在任务运行程序中运行shell命令 类型ShellPlugin结构{ scope*scope.scope 参数 日志记录器 陈波先生 } //调用插件 func(p*ShellPlugin)调用(tx*job.RunContext,r plugins.JobRunner)

我有一个跟踪文件更改的程序,应该在文件更改时重新启动指定的进程

我使用
cmd.Process.Kill()
终止前一个进程,但调用
Kill()
后它仍保持活动状态

与“从项目开始”流程相关的一些代码:

//ShellPlugin允许在任务运行程序中运行shell命令
类型ShellPlugin结构{
scope*scope.scope
参数
日志记录器
陈波先生
}
//调用插件
func(p*ShellPlugin)调用(tx*job.RunContext,r plugins.JobRunner)(错误){
延迟关闭(p.done)
//流程:/bin/sh-c ping google.com
cmd,err:=p.params.createProcess(p.scope)
如果错误!=零{
返回fmt.Errorf(“未能创建进程以执行命令“%s”:%s”,p.params.command,err)
}
p、 log.Debug(“命令:“%s”,p.params.command)
p、 log.Debug(`starting process“%s”…`,strings.Join(cmd.Args,”))
如果err=cmd.Start();err!=nil{
返回fmt.Errorf(`failed to execute command“%s”:%s`,strings.Join(cmd.Args,”),err)
}
go func(){
挑选{

病例问题是主进程
sh
被杀死,但子进程
睡眠
仍然活着

解决方案是将进程组分配给主进程,并杀死整个进程组

// assign process group
cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}

// Kill pg
syscall.Kill(-cmd.Process.Pid, syscall.SIGKILL)
找到了解决方案