Причина, по которой вы получаете неупорядоченный вывод, заключается в том, что вы не можете точно предсказать, какой ребенок станет активным, когда.Таким образом, может случиться так, что выполнение вашего первого ребенка будет отложено до тех пор, пока ваш второй ребенок не будет fork()
ed и запущен.
Обычно ваши дети получают последовательные PID, хотя это зависит от ОС.
Обапроблемы не должны быть проблемой с вашей запланированной задачей - ни абсолютные PID действительно не имеют значения (как сказано, каждая ОС может делать свое дело, назначая PID последовательно или случайным образом), ни порядок, в котором дети делают свое дело:каждая часть потомков может иметь разное время выполнения, что приводит к неупорядоченному выводу.Это считается до тех пор, пока данные передаются правильно - это тот случай, когда родитель генерирует последовательность, а затем разветвляется.В этом случае структура памяти дочернего процесса такая же, как и у родительского процесса во время разветвления.Таким образом, родитель может изменить свой «массив передачи данных», не затрагивая уже работающих дочерних элементов.
Для уменьшения путаницы вы можете удалить вывод PID в каждой строке.Возможно, они могут быть выведены при соответствующем запуске дочернего процесса, но после этого должно быть достаточно сказать, например, Child 3: straight length 6 <S6,H5,C4,S3,H2,SA>
без повторения PID.