old_contents: #  Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserve.
  #
  #Licensed under the Apache License, Version 2.0 (the "License");
  #you may not use this file except in compliance with the License.
  #You may obtain a copy of the License at
  #
  #    http://www.apache.org/licenses/LICENSE-2.0
  #
  #Unless required by applicable law or agreed to in writing, software
  #distributed under the License is distributed on an "AS IS" BASIS,
  #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  #See the License for the specific language governing permissions and
  #limitations under the License.
  
  import os
  import signal
  
  __all__ = ['AttrDict']
  
  
  def _term(sig_num, addition):
      print('current pid is %s, group id is %s' % (os.getpid(), os.getpgrp()))
      os.killpg(os.getpgid(os.getpid()), signal.SIGKILL)
  
  
  signal.signal(signal.SIGTERM, _term)
  
  
  class AttrDict(dict):
      def __getattr__(self, key):
          return self[key]
  
      def __setattr__(self, key, value):
          if key in self.__dict__:
              self.__dict__[key] = value
          else:
              self[key] = value
  
new_contents: #  Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserve.
  #
  #Licensed under the Apache License, Version 2.0 (the "License");
  #you may not use this file except in compliance with the License.
  #You may obtain a copy of the License at
  #
  #    http://www.apache.org/licenses/LICENSE-2.0
  #
  #Unless required by applicable law or agreed to in writing, software
  #distributed under the License is distributed on an "AS IS" BASIS,
  #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  #See the License for the specific language governing permissions and
  #limitations under the License.
  
  import os
  import signal
  
  __all__ = ['AttrDict']
  
  
  def _term(sig_num, addition):
      print('current pid is %s, group id is %s' % (os.getpid(), os.getpgrp()))
      os.killpg(os.getpgid(os.getpid()), signal.SIGKILL)
  
  
  signal.signal(signal.SIGTERM, _term)
  signal.signal(signal.SIGINT, _term)
  
  
  class AttrDict(dict):
      def __getattr__(self, key):
          return self[key]
  
      def __setattr__(self, key, value):
          if key in self.__dict__:
              self.__dict__[key] = value
          else:
              self[key] = value
  
subject: fix subprocess not stop when press ctr+c to stop main process (#2681)