code: def _serialiseJob(self, jobStore, jobsToJobGraphs, rootJobGraph):
          
          # Pickle the job so that its run method can be run at a later time.
          # Drop out the children/followOns/predecessors/services - which are
          # all recorded within the jobStore and do not need to be stored within
          # the job
          self._children, self._followOns, self._services = [], [], []
          self._directPredecessors, self._promiseJobStore = set(), None
          # The pickled job is "run" as the command of the job, see worker
          # for the mechanism which unpickles the job and executes the Job.run
          # method.
          with jobStore.writeFileStream(rootJobGraph.jobStoreID) as (fileHandle, fileStoreID):
              pickle.dump(self, fileHandle, pickle.HIGHEST_PROTOCOL)
          # Note that getUserScript() may have been overridden. This is intended. If we used
          # self.userModule directly, we'd be getting a reference to job.py if the job was
          # specified as a function (as opposed to a class) since that is where FunctionWrappingJob
          #  is defined. What we really want is the module that was loaded as __main__,
          # and FunctionWrappingJob overrides getUserScript() to give us just that. Only then can
          # filter_main() in _unpickle( ) do its job of resolving any user-defined type or function.
          userScript = self.getUserScript().globalize()
          jobsToJobGraphs[self].command = ' '.join(('_toil', fileStoreID) + userScript.toCommand())
          #Update the status of the jobGraph on disk
          jobStore.update(jobsToJobGraphs[self])
docs: Pickle a job and its jobGraph to disk.