Как напълно да убиете дъщерен процес

Имам най-простия код, който просто отпечатва числа за 5/3 секунди.

В друга програма стартирам "go run first.go %" в цикъл, където i е само индексът на цикъла, и изчаквам процесът да завърши. Но секунда след стартиране убивам процеса (cmd.Process.Kill()). cmd.Wait() е деблокиран, процесът се счита за убит, цикълът започва отначало. Но числата продължават да се показват до края на програмата (5/3 секунди). Как е възможно процесът да изглежда убит, но все още да продължава да работи?

Има подозрение, че убивам go, но дъщерният процес (двоичният файл, компилиран от go) отива към init, след което завършва действието си и умира. След това трябва или да го създадете сами и да стартирате двоичния файл, или да научите как да убивате заедно с работещия двоичен файл.

go run има някои особености, например можете да го стартирате в конзолата и да забравите - той спокойно ще се отърве от конзолата. Тук имате подобна ситуация. Ако искате да изпълните някакъв код в "дете" процес, направете го изрично: 1. чрез fork() - което не е желателно 2. чрез goroutines 3. . Но очевидно се опитвате да кръстосате приложение на Golang с приложение на друг език (иначе откъде идват тези проблеми). В този случай имате нужда от: 1. научете приложението (first.go) да разбира сигналите на операционната система, за да направите това, проучете os.Signal и syscall.SIGKILL (като цяло прочетете какви сигнали трябва да се обработват, когато приложението се прекрати) и прекратете приложението правилно в точното време 2. все едно, компилирайте първо в двоичен файл, отидете да инсталирате first.go и вече го използвайте.

И накрая - не е нужно да хабите ресурси така - стартирайте друга програма N пъти само за да преброите няколко числа от същия тип. формапрограмата е по-обемна, изпратете й куп данни и получете още един куп резултати от нея наведнъж. Или направете многонишкова услуга, която приема заявки и издава отговори.