简体   繁体   中英

Why is it necessary to terminate a process when the child process has already ignored the SIGINT signal?

My English is not good.

def _executor_hook(job_queue, result_queue):

    # attempt workaround of https://github.com/newsapps/beeswithmachineguns/issues/17
    # this function also not present in CentOS 6
    if HAS_ATFORK:
        atfork()

    signal.signal(signal.SIGINT, signal.SIG_IGN)
    while not job_queue.empty():
        try:
            host = job_queue.get(block=False)
            result_queue.put(multiprocessing_runner._executor(host))
        except Queue.Empty:
            pass
        except:
            traceback.print_exc()

class Runner(object):
    # ...
    def _parallel_exec(self, hosts):
        ''' handles mulitprocessing when more than 1 fork is required '''

        manager = multiprocessing.Manager()
        job_queue = manager.Queue()
        for host in hosts:
            job_queue.put(host)
        result_queue = manager.Queue()

        workers = []
        for i in range(self.forks):
            prc = multiprocessing.Process(target=_executor_hook,
                args=(job_queue, result_queue))
            prc.start()
            workers.append(prc)

        try:
            for worker in workers:
                worker.join()
        except KeyboardInterrupt:
            for worker in workers:
                worker.terminate()
                worker.join()

This lets the workers do their thing until they're done

try:
  for worker in workers:
    worker.join()

This gets called when you press ctrl+c

except KeyboardInterrupt:
  for worker in workers:
    worker.terminate()
    worker.join()

You are basically telling the program: "Don't let the workers finish their stuff, shut them down and get me out of here NOW"

在 SIGINT 上,它会告诉每个工作人员终止,但它仍然等待他们全部退出<\/em>(完成他们在终止时所做的任何事情),然后再自行退出。

"

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM