Можно ли выполнить команду оболочки, создав поток, то есть без использования popen/system или любого из вариантов fork-exec? Почему или почему нет?
Чтобы предоставить больше контекста, я запускаю многопоточную программу, где один из потоков должен выполнять сценарий оболочки. В настоящее время он использует popen(). Однако, поскольку разветвление в многопоточной программе считается плохой практикой, можно ли добиться того же путем нереста потока?
Здесь полезно резюме по многопоточным и fork + exec потенциальным проблемам: http://www.linuxprogrammingblog.com/threads-and-fork-think-twice-before-using-them
Похоже, что если вы хотите выполнять другие программы и даже сценарии оболочки, вам нужно использовать fork + exec, это неизбежно. Просто будьте осторожны и подготовьте свои темы для такого "плохого" события, как fork. Также вы можете закрыть все ненужные дескрипторы файлов в специальном однопоточном доверенном помощнике выполнения, который запускается из основного приложения, если это проблема.