Set bufferedProcess to null on process exit or run error

This prevents calling kill block while closing the view when
no processes are running. This was the case as
BufferedProcess.process is not automatically nullified.
Send SIGINT to running process and all its children

Among others, this fixes the problem with Go apps not being closed
properly, as only the "go run" process is being killed and the
application itself is running in the background (possibly) infinitely.
Ignore kill errors of children

In cases where the main process is killing its children properly,
kill fails with ESRCH error.