> > 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)... >
Hmm... *Do not communicate by sharing memory; instead, share memory by communicating.* Regards пятница, 10 августа 2018 г., 7:02:01 UTC+3 пользователь Ian Lance Taylor написал: > > On Thu, Aug 9, 2018 at 6:51 PM, <natea...@gmail.com <javascript:>> > 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...@googlegroups.com <javascript:>. > > 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.