code: func (c *client) SignalProcess(_ context.Context, containerID, processID string, signal int) error {
  	ctr, p, err := c.getProcess(containerID, processID)
  	if err != nil {
  		return err
  	}
  
  	logger := c.logger.WithFields(logrus.Fields{
  		"container": containerID,
  		"process":   processID,
  		"pid":       p.pid,
  		"signal":    signal,
  	})
  	logger.Debug("Signal()")
  
  	if processID == libcontainerdtypes.InitProcessName {
  		if syscall.Signal(signal) == syscall.SIGKILL {
  			// Terminate the compute system
  			ctr.Lock()
  			ctr.terminateInvoked = true
  			if err := ctr.hcsContainer.Terminate(); err != nil {
  				if !hcsshim.IsPending(err) {
  					logger.WithError(err).Error("failed to terminate hccshim container")
  				}
  			}
  			ctr.Unlock()
  		} else {
  			// Shut down the container
  			if err := ctr.hcsContainer.Shutdown(); err != nil {
  				if !hcsshim.IsPending(err) && !hcsshim.IsAlreadyStopped(err) {
  					// ignore errors
  					logger.WithError(err).Error("failed to shutdown hccshim container")
  				}
  			}
  		}
  	} else {
  		return p.hcsProcess.Kill()
  	}
  
  	return nil
  }
docs: // Signal handles `docker stop` on Windows. While Linux has support for
  // the full range of signals, signals aren't really implemented on Windows.
  // We fake supporting regular stop and -9 to force kill.