How do we guarantee that an existing pod is DEAD before a new one is created in a deployment

Assuming I have a deployment which runs one pod. If for some reason(for example: node restart, OOM in container) a replacement pod is created, how can I be sure that the old pod is completely dead and that the process being run in its container is definitely not running anymore. From Deployment docs, I can see that if .spec.strategy.type==Recreate then ‘all existing pods are killed before new ones are created’. How does k8s confirm that the pod is indeed ‘killed’. Is there any case where the process in old pod is still running and the new replacement pod starts the process again? If yes, can k8s somehow prevent this from happening? Here’s a sample deployment with one pod:

apiVersion: apps/v1beta2
kind: Deployment
  annotations: "1" u-hxddpeaoep
  creationTimestamp: "2020-03-18T18:27:46Z"
  generation: 1
  labels: norman deployment-repacking-test-one-at-a-time-test
  name: one-at-a-time-test
  namespace: repacking-test
  resourceVersion: "162550248"
  selfLink: /apis/apps/v1beta2/namespaces/repacking-test/deployments/one-at-a-time-test
  uid: d41cb627-b84f-4d7f-aef6-dd4c48efd79e
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
    matchLabels: deployment-repacking-test-one-at-a-time-test
    type: ReCreate
      annotations: "2020-03-18T18:27:45Z"
      creationTimestamp: null
      labels: deployment-repacking-test-one-at-a-time-test
      - image: ubuntu:xenial
        imagePullPolicy: Always
        name: one-at-a-time-test
        resources: {}
          allowPrivilegeEscalation: false
          capabilities: {}
          privileged: false
          readOnlyRootFilesystem: false
          runAsNonRoot: false
        stdin: true
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        tty: true
      dnsConfig: {}
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
  availableReplicas: 1
  - lastTransitionTime: "2020-03-18T18:27:46Z"
    lastUpdateTime: "2020-03-18T18:27:49Z"
    message: ReplicaSet "one-at-a-time-test-559bdcc84b" has successfully progressed.
    reason: NewReplicaSetAvailable
    status: "True"
    type: Progressing
  - lastTransitionTime: "2020-03-18T18:42:28Z"
    lastUpdateTime: "2020-03-18T18:42:28Z"
    message: Deployment has minimum availability.
    reason: MinimumReplicasAvailable
    status: "True"
    type: Available
  observedGeneration: 1
  readyReplicas: 1
  replicas: 1
  updatedReplicas: 1

Cluster information:

Kubernetes version:Client Version: version.Info{Major:“1”, Minor:“14”, GitVersion:“v1.14.7”, GitCommit:“8fca2ec50a6133511b771a11559e24191b1aa2b4”, GitTreeState:“clean”, BuildDate:“2019-09-18T14:47:22Z”, GoVersion:“go1.12.9”, Compiler:“gc”, Platform:“linux/amd64”}
Server Version: version.Info{Major:“1”, Minor:“15”, GitVersion:“v1.15.5”, GitCommit:“20c265fef0741dd71a66480e35bd69f18351daea”, GitTreeState:“clean”, BuildDate:“2019-10-15T19:07:57Z”, GoVersion:“go1.12.10”, Compiler:“gc”, Platform:“linux/amd64”}

Cloud being used: bare-metal
Installation method:
Host OS: Ubuntu 16.04
CNI and version:
CRI and version: