Как сказал Саи, оболочка - это ребенок, поэтому сигналы перехватываются им - лучший способ, который я нашел, - использовать shell = False и использовать shlex для разделения командной строки:
if isinstance(command, unicode):
cmd = command.encode('utf8')
args = shlex.split(cmd)
p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
Затем p.kill () и p.terminate () должны работать так, как вы ожидаете.
HashMap
не является потокобезопасным, поэтому не используйте параллельные потоки с ним.
Кроме того, зачем это делать, когда потоки могут сделать это для вас?
DbDetails.parallelStream().collect(Collectors.groupingBy(Detail::getId))