system()
вызов должен блокировать до завершения выполнения.Если для перемещения a на b требуется час, процесс или поток, вызывающий system()
, будет блокироваться в течение часа.Зная это, можно объяснить странное поведение.
Если вы ожидаете немедленного возврата system()
, это, вероятно, означает, что вы ожидаете, что код, запускаемый после вызова, будет введен к тому времени, когда вы увидите странное поведение.Весьма вероятно, что из-за того, что system()
занимает больше времени, чем ожидалось, некоторая область памяти не была выделена или инициализирована.Вероятно, это является причиной ошибки сегментации, когда другой поток или процесс пытался получить к ней доступ.
Другими словами, если вы не ожидали system()
блокировки, вы, вероятно, предположилиэтот код, следующий за ним, будет запускаться гораздо раньше, чем на самом деле.
Разблокировка, которая станет темой для другого вопроса.Ответ на этот вопрос - нет, вы не видите недостатков в функции system()
, она ведет себя точно так, как ожидалось.