func Command(logger *zap.Logger, binPath string, args ...string) Cmd {
	cmd := exec.Command(binPath, args...)
	cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
	return Cmd{
		ctx:     nil,
		logger:  logger.Named("cmd"),
		process: cmd,
	}
}
Command creates a Cmd without a context. It configures the internal
exec.Cmd of Cmd so that we may kill its unix process and all its children
without creating orphans.

See https://medium.com/@felixge/killing-a-child-process-and-all-of-its-children-in-go-54079af94773.
package gotenberg
import (
	"bufio"
	"context"
	"errors"
	"fmt"
	"io"
	"os/exec"
	"strings"
	"syscall"
	"go.uber.org/zap"
)
type Cmd struct {
	ctx     context.Context
	logger  *zap.Logger
	process *exec.Cmd
}