On Thu, Aug 9, 2018 at 6:51 PM, <nateandj...@gmail.com> wrote: > > https://play.golang.org/p/mr58JS4WsJV > > Okay, I realize now that I didn't do a very good job in my first post of > explaining my problem, so I'll trying again. In the above code I need to > signal(sigint or sigterm) the exec.CommandContext on line 69 that is > blocking so it will stop and finish the goroutine. The goal behind the code > is to set a record duration and then stop the blocking command after the > record timer has been met and exit the goroutine normally. So far I haven't > been able to figure out how to signal the command to stop. I have two > tuners that can be recording a the same time, so I need them running in > goroutines so the main thread can do other things. I read through the > context package that you recommended, but still can't get it to work.
The first step is to get the idea of signals out of your head. As I said, you can not send a signal to a goroutine. It's the wrong approach. Instead, create a context.Context value (e.g., context.Background), then pass it to context.WithTimeout or context.WithCancel, then pass the Context to your goroutine. Have your function periodically check whether context.Err is set. In some cases this is naturally done by selecting on context.Done along with other channels, in some cases you need to call context.Err every so often. When you want the goroutine to stop, call the cancel function returned by WithTimeout or WithCancel. For more information, see https://blog.golang.org/context . Ian > On Wednesday, August 8, 2018 at 12:20:11 AM UTC-4, Ian Lance Taylor wrote: >> >> On Tue, Aug 7, 2018 at 7:02 PM, <natea...@gmail.com> wrote: >> > >> > https://play.golang.org/p/d5n9bYmya3r >> > >> > I'm new to the go language and trying to figure out how to sigint a >> > blocking >> > goroutine. in the playground code I included an infinite for loop to >> > simulate the blocking. In my real world use the for block would be a >> > long >> > running file save from an external device. I appreciate any advice or >> > direction that is given. >> >> I'm not sure quite what you mean, but in general you can not send a >> signal to a goroutine in Go. Goroutines are not threads. If you want >> a goroutine to be interruptible, you must write the goroutine to check >> whether something is trying to interrupt it; the standard library's >> "context" package is often used for this purpose. >> >> Ian > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.